Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不';当我们联系enum时,是否会出现异常,enum不会';不存在?_C#_.net_Enums - Fatal编程技术网

C# 为什么不';当我们联系enum时,是否会出现异常,enum不会';不存在?

C# 为什么不';当我们联系enum时,是否会出现异常,enum不会';不存在?,c#,.net,enums,C#,.net,Enums,我非常感兴趣的是,为什么这段代码不会给出异常,并且12356将输出到控制台? 此行为枚举的含义是什么 enum Dummy { D1 = 123, D2 = 1234, D3 } class Program { static void Main(string[] args) { Dummy d = (Dummy)12356; Console.WriteLine((int)d); Console.ReadKey();

我非常感兴趣的是,为什么这段代码不会给出异常,并且12356将输出到控制台? 此行为枚举的含义是什么

enum Dummy { D1 = 123, D2 = 1234, D3 }
class Program
{
     static void Main(string[] args)
     {
          Dummy d = (Dummy)12356;
          Console.WriteLine((int)d);
          Console.ReadKey();
     }
}
这是一个bug还是一个特性

这是一个bug还是一个特性

一个特性,尽管当代码不能按预期工作时,它可能会给您带来奇怪的情况

例如,您可以组合枚举值,例如:

enum Dummy { D1 = 1, D2 = 2, D3 = 4 }

Dummy v = Dummy.D1 | Dummy.D2;
这里的支持值是3

您可以检查以下任一值:

bool isD1 = (v & Dummy.D1) == Dummy.D1;
Dummy v = Dummy.D1;
bool isValid = Enum.IsDefined(typeof(Dummy), v);
您可以检查枚举的单值有效性,如下所示:

bool isD1 = (v & Dummy.D1) == Dummy.D1;
Dummy v = Dummy.D1;
bool isValid = Enum.IsDefined(typeof(Dummy), v);
这是一个bug还是一个特性

一个特性,尽管当代码不能按预期工作时,它可能会给您带来奇怪的情况

例如,您可以组合枚举值,例如:

enum Dummy { D1 = 1, D2 = 2, D3 = 4 }

Dummy v = Dummy.D1 | Dummy.D2;
这里的支持值是3

您可以检查以下任一值:

bool isD1 = (v & Dummy.D1) == Dummy.D1;
Dummy v = Dummy.D1;
bool isValid = Enum.IsDefined(typeof(Dummy), v);
您可以检查枚举的单值有效性,如下所示:

bool isD1 = (v & Dummy.D1) == Dummy.D1;
Dummy v = Dummy.D1;
bool isValid = Enum.IsDefined(typeof(Dummy), v);

这是设计上的,但不鼓励,如:

可以为meetingDay指定任意整数值。对于 例如,这行代码不会产生错误:meetingDay= (日)42。但是,您不应该这样做,因为 预期枚举变量将只包含其中一个值 由枚举定义。将任意值指定给 枚举类型是引入错误的高风险

您始终可以使用
IsDefined
检查是否为枚举类型定义了给定值:

Console.WriteLine(Enum.IsDefined(typeof(Dummy), 123)); //True
Console.WriteLine(Enum.IsDefined(typeof(Dummy), 123456)); //False

这是设计上的,但不鼓励,如:

可以为meetingDay指定任意整数值。对于 例如,这行代码不会产生错误:meetingDay= (日)42。但是,您不应该这样做,因为 预期枚举变量将只包含其中一个值 由枚举定义。将任意值指定给 枚举类型是引入错误的高风险

您始终可以使用
IsDefined
检查是否为枚举类型定义了给定值:

Console.WriteLine(Enum.IsDefined(typeof(Dummy), 123)); //True
Console.WriteLine(Enum.IsDefined(typeof(Dummy), 123456)); //False

我认为这不是复制品。这个问题问为什么允许对枚举强制转换一个随机整数,而不是它是否可能。这个主题没有回答我的问题,所以它不是重复的。我同意GSerg的观点,尽管我对重新打开这个问题感兴趣,所以我不会投票给我自己。这与C#中其他强制转换的工作方式是一致的。比如从int到byte,该int存储负值或256或更多。心智模型是“我是故意写这段代码的,不要麻烦再次检查我是否做对了”。这种检查非常昂贵,尤其是对于枚举。唯一的例外是对象上的强制转换,必须检查它们,因为不这样做会导致严重的不可调试内存损坏问题。直接复制可能不是直接的答案。但这个答案本身就是一个复制品。Patrick Hofman标记的副本可能包含您要查找的答案:。看那里(虽然它可能需要更新)。我不认为它是重复的。这个问题问为什么允许对枚举强制转换一个随机整数,而不是它是否可能。这个主题没有回答我的问题,所以它不是重复的。我同意GSerg的观点,尽管我对重新打开这个问题感兴趣,所以我不会投票给我自己。这与C#中其他强制转换的工作方式是一致的。比如从int到byte,该int存储负值或256或更多。心智模型是“我是故意写这段代码的,不要麻烦再次检查我是否做对了”。这种检查非常昂贵,尤其是对于枚举。唯一的例外是对象上的强制转换,必须检查它们,因为不这样做会导致严重的不可调试内存损坏问题。直接复制可能不是直接的答案。但这个答案本身就是一个复制品。Patrick Hofman标记的副本可能包含您要查找的答案:。请看那里(不过可能需要更新)。这是一个很好的猜测,谢谢。不幸的是,我无法评估你的答案:(这是一个很好的猜测,谢谢。不幸的是,我无法评估你的答案:(