如何将枚举的范围限制为方法

时间:2016-03-16 07:59:27

标签: c# struct enums

变量的范围仅限于方法If if在该方法中声明变量(在方法外部无法访问)。是否可以以类似的方式定义enum

如果我这样做,代码就不会编译;

 void someMethod()
    { 
        enum MyEnum
         {
           val1,
           val2,
           Val3
         }
    }

这可能是什么原因?我用struct扩展了我的尝试同样的事情正在发生(代码不会编译)。因此我得出结论“命名类型不能在方法中定义”但我没有任何理由得出这个结论。任何人都可以告诉我“为什么它不允许我在方法中定义命名类型”的原因?

注意: - 不允许;代码不会编译。我的问题是为什么不允许这样做?

3 个答案:

答案 0 :(得分:1)

您无法在函数内声明枚举。您可以在私有类中定义它们。

这样的东西
public class Foo {
  private enum MyEnum { val1, val2, val3 }
}

如果您查看C# specs,那么您会发现它的定义如下:

  

类型声明是类声明(第10.1节),a   struct-declaration(第11.1节),一个接口声明(Section   13.1),枚举声明(第14.1节)或委托声明(第15.1节)。

所以enum是一种类型,并且据说:

  

类型声明可以作为a中的顶级声明出现   编译单元或作为命名空间中的成员声明,​​类,   或者结构。

现在,如果你想知道为什么它的设计是那样的,那么我想你需要向语言设计师咨询。

答案 1 :(得分:1)

您要在方法中创建的类型将具有有限的范围,并且不会存在于其外部。创建这样的类型没有意义。对于这种情况,您可以使用匿名类型。

但您可以为给定问题定义匿名类型。

private enum MyEnum { val1, val2, val3 }; //however this should be outside the method

public void SomeMethod ()
{
    var anonymousEnum= new { MyEnum.val1,MyEnum.val2};
}

答案 2 :(得分:-1)

无法在方法内声明类型。枚举应该在命名空间,结构或类中声明。

相关问题