我知道这个问题之前曾被问过,但我无法解决这个问题
我想编写一个类来检测并返回颜色,但是我得到了这个错误:并非所有代码路径都返回类中的值
class Class1
{
public System.Drawing.Color colordetector(string name)
{
if (name.Contains("blue") == true) { return System.Drawing.Color.Blue; }
if (name.Contains("green") == true) { return System.Drawing.Color.Green; }
if (name.Contains("red") == true) { return System.Drawing.Color.Red; }
}//method colordetector
}//class1
答案 0 :(得分:2)
让我们看看你的班级......
所以你已经创建了一个方法..并且已经定义了(在方法签名中)该类返回System.Drawing.Color
。
现在,查看里面的代码这个方法......你正在进行三次 if
检查。
但如果name
是“黑色”,会发生什么? ?接下来会发生什么?它不会通过这三个if-checks中的每一个然后做什么?
当颜色
时,代码需要处理场景。解决方案:
答案 1 :(得分:1)
如果所有if
条件都失败,则您的方法不会返回任何结果..
失败条件:
字符串不包含blue
,green
或red
public System.Drawing.Color colordetector(string name)
{
if (name.Contains("blue")) { return System.Drawing.Color.Blue; }
if (name.Contains("green")) { return System.Drawing.Color.Green; }
if (name.Contains("red")) { return System.Drawing.Color.Red; }
// < == ????? What if all failled ?? what to retun
}//method colordetector
解决方案是返回您选择的color
,表明发生了错误。
public System.Drawing.Color colordetector(string name)
{
if (name.Contains("blue")) { return System.Drawing.Color.Blue; }
if (name.Contains("green")) { return System.Drawing.Color.Green; }
if (name.Contains("red")) { return System.Drawing.Color.Red; }
return System.Drawing.Color.Black; // <= Default to send Black if all conditions failled
}//method colordetector
答案 2 :(得分:0)
您的方法不会返回任何值,如果,名为name
的变量不包含蓝色,绿色和红色中的一个。
您的方法的返回类型为System.Drawing.Color
。因此,您应始终返回System.Drawing.Color
值。
答案 3 :(得分:0)
因为您已指定了返回类型,并且返回语句似乎只放在if块中。
因此,如果你的if条件都没有计算为true,那么方法永远不会返回任何内容,因此它会给你这个消息。
一种解决方法是返回一些默认颜色,并有一个逻辑来检查调用此方法的默认颜色。
编辑:它不允许您返回null,因为它是一个不可为空的值类型