enum
当您实例化using时,C# 的编译器不会抱怨new
:
enum Foo
{
Bar
}
Foo x = new Foo();
x
然后将是一个Foo
with value Bar
。
new Foo()
有什么我不知道的用途吗?还是我只是装箱并立即拆箱枚举值?
enum
当您实例化using时,C# 的编译器不会抱怨new
:
enum Foo
{
Bar
}
Foo x = new Foo();
x
然后将是一个Foo
with value Bar
。
new Foo()
有什么我不知道的用途吗?还是我只是装箱并立即拆箱枚举值?
Foo.Bar
在 IL 级别上,和之间没有区别new Foo()
。两者都将评估为同一组 IL 操作码
L_0001: ldc.i4.0
L_0002: stloc.0
这些操作转换为不同 IL 的唯一情况是new
操作通常完成时
void Method<T>() where T : struct {
T local = new T();
}
Method<Foo>();
在这种特殊情况下new
将产生一组不同的操作码
L_0005: ldloca.s e3
L_0007: initobj !!T
Foo.Bar
除了这个有点深奥的区别之外,和之间没有实际区别new Foo()
请参阅MSDN 关于 System.Enum Class 的条目,特别是标记为Instantiating an Enumeration Type的部分。
据我了解,创建 an 的实例会Enum
为您提供默认值Enum
(即0
)。
示例(直接取自 MSDN 文章):
public class Example
{
public enum ArrivalStatus { Late=-1, OnTime=0, Early=1 };
public static void Main()
{
ArrivalStatus status1 = new ArrivalStatus();
Console.WriteLine("Arrival Status: {0} ({0:D})", status1);
}
}
// The example displays the following output:
// Arrival Status: OnTime (0)