Enum接受整数作为字符串并为Enum添加不同的值

时间:2016-04-01 10:01:55

标签: c# enums

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”给出了真实。

1 个答案:

答案 0 :(得分:2)

Enum.TryParse将接受任何整数,无论​​是否为枚举成员。来自documentation

  

如果value是不表示TEnum枚举的基础值的整数的字符串表示形式,则该方法返回一个枚举成员,其基础值的值转换为整数类型。如果不希望出现这种情况,请调用IsDefined方法以确保整数的特定字符串表示形式实际上是TEnum的成员。