enum当您实例化using时,C# 的编译器不会抱怨new:
enum Foo
{
Bar
}
Foo x = new Foo();
x然后将是一个Foowith value Bar。
new Foo()有什么我不知道的用途吗?还是我只是装箱并立即拆箱枚举值?
enum当您实例化using时,C# 的编译器不会抱怨new:
enum Foo
{
Bar
}
Foo x = new Foo();
x然后将是一个Foowith 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)