“ 并非所有的代码路径都返回值”这个问题怎么解决?
错误 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();
}
} --------------------编程问答-------------------- 任何具有返回值的方法或函数必须具有返回值或抛错,否则就出错。
上面的代码改成:
--------------------编程问答-------------------- up up --------------------编程问答--------------------
public string GetIdStr() //把似有成员变量_id转换为字符串并返回
{
StringBuilder s = new StringBuilder(25);
foreach (bool b in _id)
{
s.Append(b ? "1" : "0");
//放在这里是不能确定GetIdStr()有返回值的
}
return s.ToString();
}
--------------------编程问答-------------------- up --------------------编程问答-------------------- 当_id 为空时,这个函数没有返回值,
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值
}
按照上面人的方法改就可以了 --------------------编程问答-------------------- 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();
} --------------------编程问答-------------------- 没有返回值 --------------------编程问答--------------------
这个讲得很好
补充:.NET技术 , C#