我在以下代码(代码片段)上收到编译器错误。 为什么此代码不正确?一个解决方案
protected Dialog onCreateDialog(int paramInt)
{
switch (paramInt)
{
default:
case 0:
}
for (Object localObject = null; ; localObject = this.dialog)
{
return localObject; // here problem cast
this.dialog = new ProgressDialog(this);
this.dialog.setMessage(getResources().getString(2131165201));
this.dialog.setIndeterminate(true);
this.dialog.setCancelable(false);
}
}
您在this.dialog = new ProgressDialog(this);
之前有return
语句,该语句成为unreachable
代码,因为控件永远不会到达返回语句之后的下一个直接语句。这将导致编译错误。您需要翻转顺序,如下所示:
for (Dialog localObject = null; ; localObject = this.dialog)
{
this.dialog = new ProgressDialog(this);
return localObject;
}
我不确定你的循环会做什么,但有一件事可以肯定它不会循环,而只是在第一次迭代本身中返回。此外,您的localObject
将保持null
,因为它不会到达for
循环的increment
块(由于返回语句,它会事先返回)。
编辑:只是为了修复您的编译错误,请将loop
底部的 return 语句移动为:
protected Dialog onCreateDialog(int paramInt)
{
switch (paramInt)
{
default:
case 0:
}
for (Dialog localObject = null; ; localObject = this.dialog)
{
this.dialog = new ProgressDialog(this);
this.dialog.setMessage(getResources().getString(2131165201));
this.dialog.setIndeterminate(true);
this.dialog.setCancelable(false);
return localObject; // here problem cast
}
}
正如我之前提到的,我没有得到使用 for
循环的真正原因,因为由于里面的return
语句,它根本不会循环。
返回后不能(或不应该)有任何代码。 它被称为"死"或"无法访问"代码。
for (Object localObject = null; ; localObject = this.dialog) {
return localObject;
this.dialog = new ProgressDialog(this);
}
首先,你返回 localObject,它设置为 null。不确定这是否给了你一个空指针异常,但它似乎很可疑。其次,正如 Yogendra 所说,程序永远不会到达 this.dialog = new ProgressDialog(this);
语句,因为 return 语句成为死代码之后的任何内容。