-1

我在以下代码(片段)上遇到编译器错误。为什么这段代码不正确?一个解决方案

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);
 }
}
4

3 回答 3

2

return之前的语句this.dialog = new ProgressDialog(this);变成unreachable了代码,因为控制永远不会到达 return 语句之后的下一个直接语句。这将导致编译错误。您需要将订单翻转为:

    for (Dialog localObject = null; ; localObject = this.dialog)
    {
       this.dialog = new ProgressDialog(this);
       return localObject;
     }

我不确定你的循环会做什么,但有一件事是肯定它不会循环,而只是在第一次迭代中返回。您localObject也将保留null,因为它不会到达循环incrementfor(由于 return 语句,它会提前返回)。

编辑:只是为了修复您的编译错误,将您的 return 语句移动到 as 的底部loop

    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里面的语句。

于 2012-12-02T02:39:03.000 回答
1

返回后您不能(或不应该)有任何代码。它被称为“死”或“无法访问”的代码。

于 2012-12-02T02:39:20.140 回答
1
for (Object localObject = null; ; localObject = this.dialog) {
   return localObject;
   this.dialog = new ProgressDialog(this);
}

首先,您将返回设置为 null 的 localObject。不确定这是否会给你一个空指针异常,但它看起来很可疑。this.dialog = new ProgressDialog(this);其次,正如 Yogendra 所说,在return 语句变成死代码之后,程序永远不会到达该语句。

于 2012-12-02T02:44:03.580 回答