变量的范围仅限于方法If if在该方法中声明变量(在方法外部无法访问)。是否可以以类似的方式定义enum
?
如果我这样做,代码就不会编译;
void someMethod()
{
enum MyEnum
{
val1,
val2,
Val3
}
}
这可能是什么原因?我用struct
扩展了我的尝试同样的事情正在发生(代码不会编译)。因此我得出结论“命名类型不能在方法中定义”但我没有任何理由得出这个结论。任何人都可以告诉我“为什么它不允许我在方法中定义命名类型”的原因?
注意: - 不允许;代码不会编译。我的问题是为什么不允许这样做?
答案 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)
无法在方法内声明类型。枚举应该在命名空间,结构或类中声明。