当前位置:编程学习 > C#/ASP.NET >>

“ 并非所有的代码路径都返回值”这个问题怎么解决?

错误 1 “Tetris.BlockInfo.GetIdStr()”: 并非所有的代码路径都返回值 F:\C# Language\Tetris\Tetris\BlockInfo.cs 40 23 Tetris

这段的代码如下:

        public string GetIdStr()       //把似有成员变量_id转换为字符串并返回
        {
            StringBuilder s = new StringBuilder(25);
            foreach (bool b in _id)
            {
                s.Append(b ? "1" : "0");
                return s.ToString();
            }
        } --------------------编程问答-------------------- 任何具有返回值的方法或函数必须具有返回值或抛错,否则就出错。
上面的代码改成:

public string GetIdStr() //把似有成员变量_id转换为字符串并返回
  {
    StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
     s.Append(b ? "1" : "0");
     //放在这里是不能确定GetIdStr()有返回值的
  }
    return s.ToString();
  }
--------------------编程问答--------------------
引用 1 楼 ycg_893 的回复:
任何具有返回值的方法或函数必须具有返回值或抛错,否则就出错。
上面的代码改成:

C# code

public string GetIdStr() //把似有成员变量_id转换为字符串并返回
  {
    StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
     s.Append(……
 up up --------------------编程问答--------------------

  public string GetIdStr() //把似有成员变量_id转换为字符串并返回
  {
  StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
  s.Append(b ? "1" : "0");
  
  }
   return s.ToString();//将这句提到外边 
                       //原因:当_id没有值时,代码就不会走进foreach语句,此方法就没有retrun值
  }
--------------------编程问答--------------------
引用 3 楼 q107770540 的回复:
C# code

  public string GetIdStr() //把似有成员变量_id转换为字符串并返回
  {
  StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
  s.Append(b ? "1" : "0");
  
  }
   return s.ToString(……
up --------------------编程问答-------------------- 当_id 为空时,这个函数没有返回值,
按照上面人的方法改就可以了  --------------------编程问答-------------------- public string GetIdStr() //把似有成员变量_id转换为字符串并返回
  {
    StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
     s.Append(b ? "1" : "0");
     //放在这里是不能确定GetIdStr()有返回值的
  }
    return s.ToString();
  }
--------------------编程问答-------------------- public string GetIdStr() 
  {
  StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
  s.Append(b ? "1" : "0");
  } 
 return s.ToString();
  } --------------------编程问答--------------------  public string GetIdStr() //把似有成员变量_id转换为字符串并返回
  {
      StringBuilder s = new StringBuilder(25);
      foreach (bool b in _id)
      {
          s.Append(b ? "1" : "0");
          break;
      }
      return s.ToString();
  } --------------------编程问答-------------------- 并非所有的代码路径都返回值.

只要你保证所有可能情况下,都会有值返回,就行了! --------------------编程问答-------------------- 楼上的都是正确的建议,就是这样子。 --------------------编程问答-------------------- public string GetIdStr()  
  {
  StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
  s.Append(b ? "1" : "0");
  }  
 return s.ToString();
  } --------------------编程问答-------------------- 多说完了…… --------------------编程问答-------------------- 楼上正解! --------------------编程问答-------------------- public string GetIdStr()   
  {
  StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
  s.Append(b ? "1" : "0");
  }   
 return s.ToString();
  } --------------------编程问答-------------------- return s.ToString();
放到最后面 --------------------编程问答-------------------- 写一个简单的过程:

public int GetNumber(int a)
{
    if(a > 0)
        return a;
}

咋看起开上面的逻辑没有任何问题,在 C 语言里这是完全正确的,但 C# 语言很严谨,它不允许含糊其辞。具体分析一下。此过程的本意为传入一个参数,如果参数值大于零则返回该参数值。但过程中只处理了参数值大于零的情况,其他情况并没有做任何处理,所以 VS 编译器认为在反面情况下也应该有一个返回值,否则就是所谓的“并非所有的代码路径都返回值”错误产生了。 --------------------编程问答--------------------  public string GetIdStr() 
  {
      StringBuilder s = new StringBuilder(25);
      foreach (bool b in _id)
      {
         s.Append(b ? "1" : "0");
       }
         return s.ToString();
  } --------------------编程问答-------------------- 没有返回值 --------------------编程问答--------------------
引用 3 楼 q107770540 的回复:
C# code

  public string GetIdStr() //把似有成员变量_id转换为字符串并返回
  {
  StringBuilder s = new StringBuilder(25);
  foreach (bool b in _id)
  {
  s.Append(b ? "1" : "0");
  
  }
   return s.ToString(……

这个讲得很好
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,