Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 如何将枚举的范围限制为方法_C#_Struct_Enums - Fatal编程技术网

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

C# 如何将枚举的范围限制为方法,c#,struct,enums,C#,Struct,Enums,如果我在方法内部声明了一个变量(在方法外部是不可访问的),则变量的作用域仅限于该方法。是否可以以类似的方式定义枚举 如果我这样做,代码就不会编译 void someMethod() { enum MyEnum { val1, val2, Val3 } } 原因可能是什么?我用struct扩展了我的尝试,同样的事情正在发生(代码不会编译)。因此,我得出了一个结

如果我在方法内部声明了一个变量(在方法外部是不可访问的),则变量的作用域仅限于该方法。是否可以以类似的方式定义
枚举

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

 void someMethod()
    { 
        enum MyEnum
         {
           val1,
           val2,
           Val3
         }
    }
原因可能是什么?我用
struct
扩展了我的尝试,同样的事情正在发生(代码不会编译)。因此,我得出了一个结论,“命名类型不能在方法中定义”,但我没有任何理由支持这个结论。有人能告诉我“为什么不允许我在方法中定义命名类型”的原因吗


注意:-这是不允许的;代码无法编译。这里我的问题是为什么不允许它?

您不能在函数中声明枚举。您可以在私有类中定义它们

差不多

public class Foo {
  private enum MyEnum { val1, val2, val3 }
}
如果查看,您会发现它的定义如下:

类型声明是类声明(第10.1节),是 结构声明(第11.1节),接口声明(第 13.1)、枚举声明(第14.1节)或代表声明(第15.1节)

因此enum是一种类型,而且据说:

类型声明可以作为 编译单元或作为命名空间、类中的成员声明, 或结构


现在,如果您想知道为什么它是这样设计的,那么我想您需要向语言设计者咨询一下。

类型不能在方法内部声明。枚举应该在命名空间、结构或类中声明。

在方法内部创建的任何类型都将具有有限的作用域,并且不存在于方法外部。创建这样的类型是没有意义的。对于这种情况,可以使用匿名类型

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

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

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

我知道的是,你不能在函数中定义枚举!这可能有助于@mah:绝对不允许;我来这里是想知道为什么不是permitted@un-幸运的是,由于stackoverflow没有做出决定,“为什么语言功能不受支持”主要是基于意见。但如果你愿意,你可以去投票。我在问题本身中提到了这一点;真正的问题是为什么它不被允许,我认为这与正常使用没有典型的区别@un lucky:-如果你想知道为什么它是这样设计的,那么你需要向语言设计师询问这个问题。我已经在MSDN中添加了关于目前设计内容的引用:)希望这只不过是匿名类型是的,这是一种匿名类型,这是此类场景中的解决方案。在这种情况下使用普通类型是没有意义的,因为它将是无用的;但不幸的是,这不能回答我的问题。无论如何,谢谢你的回复