C# 如何为返回类型为enum的方法返回null?
我有一个枚举,它有一些值C# 如何为返回类型为enum的方法返回null?,c#,.net,enums,return-type,C#,.net,Enums,Return Type,我有一个枚举,它有一些值 public enum CompareOperators { GreaterThan, LessThan, GreaterThanEqualTo, LessThanEqualTo, EqualTo, NotEqualTo } 我有一个方法可以在各种条件下返回这个枚举 public static CompareOperators GetTypeForO
public enum CompareOperators
{
GreaterThan,
LessThan,
GreaterThanEqualTo,
LessThanEqualTo,
EqualTo,
NotEqualTo
}
我有一个方法可以在各种条件下返回这个枚举
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;
}
当switch
语句中没有满足任何条件时,返回null
的最佳方法是什么
尽管我寻找了以下问题,但我的解决方案并没有得到答案
比较器
:
public static CompareOperators? GetTypeForOperator(string strType)
类型名称后的?
使其可为空。另一个选项是使用此选项,这是相同的:
public static Nullable<CompareOperators> GetTypeForOperator(string strType)
(之后检查是否为空):
或:
或:
使您的方法返回一个可为空的
比较运算符
:
public static CompareOperators? GetTypeForOperator(string strType)
类型名称后的?
使其可为空。另一个选项是使用此选项,这是相同的:
public static Nullable<CompareOperators> GetTypeForOperator(string strType)
(之后检查是否为空):
或:
或:
在这种情况下,您不应该返回null,而应该在
default
块中抛出异常
switch (strType)
{
//...other cases
default:
throw new InvalidOperationException("Unrecognized comparison mode");
}
由于没有正确的参数,您无法继续,并且当程序遇到意外情况时,异常意味着这种情况。在这种情况下,您不应返回null,而应在
默认值
块中抛出异常
switch (strType)
{
//...other cases
default:
throw new InvalidOperationException("Unrecognized comparison mode");
}
由于没有正确的参数,您无法继续,当程序遇到意外情况时,会出现异常。您可以使用未定义的比较来扩展枚举
public enum CompareOperators
{
Undefined,
GreaterThan,
然后将其作为默认值/回退值返回
return CompareOperators.Undefined;
可以使用未定义的比较扩展枚举
public enum CompareOperators
{
Undefined,
GreaterThan,
然后将其作为默认值/回退值返回
return CompareOperators.Undefined;
我会抛出一个异常而不是返回null。只是有点脱离上下文,但我会调用它GetTypeORDefaultForOperator并使用nullable类型。我会抛出一个异常而不是返回null。只是有点脱离上下文,但我会称之为GetTypeORDefaultForOperator,并使用nullable TypeFor,因为这正是来自linked的建议,不太可能有助于。。。(答案是重复的)。开关中的一个默认大小写可能会有所帮助。@AlexeiLevenkov:你说得对。我更新了答案,为用户的具体问题量身定制的答案。因为这是链接的确切建议,不太可能有助于操作。。。(答案是重复的)。开关中的一个默认大小写可能会有所帮助。@AlexeiLevenkov:你说得对。我将答案更新为针对用户特定问题的定制答案。