如何为返回类型为枚举的方法返回null?

Shi*_*esh 0 .net c# enums return-type

我有一个有一些价值观的枚举

public enum CompareOperators
{            
        GreaterThan,
        LessThan,
        GreaterThanEqualTo,
        LessThanEqualTo,
        EqualTo,
        NotEqualTo
}
Run Code Online (Sandbox Code Playgroud)

我有一个方法,它返回此枚举的各种条件

public static CompareOperators GetTypeForOperator(string strType)
{
      switch (strType)
      {
             case "=":
                return CompareOperators.EqualTo;
             case "!=":
                return CompareOperators.NotEqualTo;
             case ">":
                return CompareOperators.GreaterThan;
             case "<":
                return CompareOperators.LessThan;
             case ">=":
                return CompareOperators.GreaterThanEqualTo;
             case "<=":
                return CompareOperators.LessThanEqualTo;
     }
     return null;
}
Run Code Online (Sandbox Code Playgroud)

我在编译时遇到以下错误

Cannot convert null to CompareOperators because it is not a non-nullable value type
Run Code Online (Sandbox Code Playgroud)

nullswitch声明中没有条件满足时返回的最佳方法是什么?

即使我查找了以下问题,我也没有得到解决方案的答案

Pat*_*man 5

使您的方法返回可为空的CompareOperators:

public static CompareOperators? GetTypeForOperator(string strType)
Run Code Online (Sandbox Code Playgroud)

?之后的类型名称可以为空.使用它的另一个选择,它是相同的:

public static Nullable<CompareOperators> GetTypeForOperator(string strType)
Run Code Online (Sandbox Code Playgroud)

有关使用可空类型的信息,请参阅MSDN.

另一个选项,如前所述,它抛出异常或返回'默认'值CompareOperators.Unknown,但这完全取决于你.最好的解决方案是根据您的要求和首选的写作风格.


最终结果:

public static CompareOperators? GetTypeForOperator(string strType)
{
    switch (strType)
    {
        case "=":
            return ...
        default:
            return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

(之后检查为null):

var x = GetTypeForOperator("strType");
if (x != null)
{ ... }
Run Code Online (Sandbox Code Playgroud)

要么:

public static CompareOperators GetTypeForOperator(string strType)
{
    switch (strType)
    {
        case "=":
            return ...
        default:
            return CompareOperators.Unknown;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么:

public static CompareOperators GetTypeForOperator(string strType)
{
    switch (strType)
    {
        case "=":
            return ...
        default:
            throw new ArgumentException("strType has a unparseable value");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 由于链接http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null的确切建议,它不太可能帮助OP ...(和重复的答案). (2认同)