我可以将int转换为C#枚举类型吗?

Pav*_*ula 4 .net c# enums

我有一个int带有两个值的枚举(基础类型),以及一个带有该类型参数的方法.是否可以将任何int值转换为我的枚举类型并将其传递给方法?如果是这样,枚举的优点是什么?是不是应该限制可用值的选择?

class Program
{
    public void Greeting(MyCode code)
    {
        Console.WriteLine(code);
    }

    static void Main(string[] args)
    {
        var p = new Program();
        var m = new MyCode();

        m = (MyCode) 3;
        p.Greeting(m);
    }
}

public enum MyCode:int
{
   Hello =1,
   Hai
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

是的,您可以转换基础类型的任何值.在这种意义上,枚举类型不是限制类型.

使用枚举的优点是:

  • 可读性
  • 明确投射时的正确性
  • 能够通过反射等方式访问价值观

我同意更多类型也是有用的,但它在C#中不存在.您可以在C#中构建自己的基于类的"伪枚举",它允许一组受限制的值(使用私有构造函数),但是:

  • 你不能让它们不可空
  • 你无法打开它们
  • 您不能将它们用于常量值(例如可选参数默认值)
  • 该值始终是引用,这可能会影响内存使用(例如,与具有基础类型字节的枚举相比)
  • 面对序列化保留受限制的值很有意思

另一方面,这些类型可以多态地行动并且具有比普通枚举更多的信息,这可以是有用的.


Yav*_*nyP 6

只是为了补充Jon的答案:你可以随时使用

Enum.IsDefined(typeof(MyCode), value)
Run Code Online (Sandbox Code Playgroud)

检查枚举定义中是否存在提供的值.