public enum Mode
{
Cloud = 1,
Local = 2
}
private static Mode _applicationMode;
public static Mode ApplicationMode(string mode)
{
get
{
{
_applicationMode = Mode.Cloud;
Mode appMode;
if (Enum.IsDefined(typeof(Mode), mode))
{
_applicationMode = (Mode)Enum.Parse(typeof(Mode), mode);
}
else if (Enum.TryParse(mode, true, out appMode))
{
_applicationMode = appMode;
}
}
return _applicationMode;
}
}
下面 我传递“ABC”作为ApplicationMode函数的参数然后它返回_applicationMode为0(AppMode枚举的默认值)
如果我传递“123”作为ApplicationMode函数的参数。但它将_applicationMode作为“123”返回。
为什么Enum接受“123”,即使AppMode Enum只有两个值,即Local和Cloud?
TryParse也应该为“123”赋予假,但它对“123”给出了真实。
答案 0 :(得分:2)
Enum.TryParse将接受任何整数,无论是否为枚举成员。来自documentation:
如果value是不表示TEnum枚举的基础值的整数的字符串表示形式,则该方法返回一个枚举成员,其基础值的值转换为整数类型。如果不希望出现这种情况,请调用IsDefined方法以确保整数的特定字符串表示形式实际上是TEnum的成员。