【问题标题】:not all code paths return a value in class并非所有代码路径都返回类中的值
【发布时间】:2015-03-14 12:12:14
【问题描述】:

我知道以前有人问过这个问题,但我无法解决这个问题

我想编写一个类来检测并返回颜色,但我收到了这个错误:并非所有代码路径都返回类中的值

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

【问题讨论】:

  • 如果name 的值不是蓝色、绿色或红色怎么办?
  • @FarhadJabiyev :谢谢它的解决我应该写一个“其他声明”
  • if 语句中也不需要 == true, contains () 已经返回 true/false
  • 毫无疑问,您看到的其他问题也适用于您的案例。仅仅因为您返回 Color 并不会改变概念并使您的情况与众不同

标签: c# class


【解决方案1】:

让我们看看你的班级...

所以你已经创建了一个方法......并且已经定义(在方法签名中)该类返回一个System.Drawing.Color

现在,看看代码里面这个方法...你正在做三个if检查。

但是如果 name 是 `'black' 会发生什么?那会发生什么?它不会通过这三个 if 检查中的每一个,然后做什么?

代码需要处理没有找到颜色的场景。

解决方案:

  • 如果未找到/处理传入的颜色,则引发异常。
  • 如果传入的颜色未找到/未处理,则返回默认颜色。

【讨论】:

    【解决方案2】:

    如果所有if 条件都失败,您的方法不会返回任何结果..

    失败条件:

    字符串不包含 bluegreenred

    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
    

    【讨论】:

    • 或者default应该是Color.Transparent? ;)
    【解决方案3】:

    因为您已经指定了返回类型,而返回语句似乎只放在 if 块内。

    因此,如果您的任何 if 条件都不为 true,则该方法将永远不会返回任何内容,因此它会给您此消息。

    一种解决方法是返回一些默认颜色,并有一个逻辑来检查您调用此方法的默认颜色。

    编辑:它不允许您返回 null,因为它是不可为空的值类型

    【讨论】:

      【解决方案4】:

      您的方法不返回任何值,如果名为 name 的变量不包含蓝色、绿色和红色之一。

      你的方法的返回类型是System.Drawing.Color。因此,您应该始终返回 System.Drawing.Color 值。

      【讨论】:

      • @user3694495 你欢迎老兄。我很高兴能帮上忙。
      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2013-10-06
      • 2016-02-14
      • 2014-04-02
      相关资源
      最近更新 更多