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)
null
在switch
声明中没有条件满足时返回的最佳方法是什么?
即使我查找了以下问题,我也没有得到解决方案的答案
使您的方法返回可为空的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)
归档时间: |
|
查看次数: |
2306 次 |
最近记录: |