[英]Passing by enum class variables in C# via parameters to a function
我在这里很困惑。 假设我在Visual Studios中有两个程序-我正在使用C#WPF。 假设我有两个程序,其中程序1以程序2为参考,并且类似地,程序2以程序1为参考。
程序1.sol
p1.xaml.cs内容:
public void checkStuff(myThing x)
{
// Do stuff (irrelevant)
}
public enum myThing
{
stuff,
stuff2,
stuff3,
stuff4
}
程式2
p2.xaml.cs内容:
// Let's say I call that function
p1 p1content = new p1();
p1content.checkStuff(0); // <-- Why does this work??
我的问题是,为什么数字0作为参数起作用? 这可能是微不足道的,但是当我传入0时,程序究竟认为我正在传入该函数呢? 起初,我以为这是位于我的enum类中的变量的索引,但这不是因为我无法传入1,2或3等。
默认情况下,在C#中, enum
的基本类型为int
。 请参阅MSDN文档 。
如本SO帖子中的评论所述:
enum关键字用于声明枚举,枚举是由一组称为枚举列表的命名常量组成的独特类型。 每个枚举类型都有一个基础类型,它可以是char以外的任何整数类型。
一个枚举具有一个基于整数的值作为基础(int,byte,ulong等)。 编译器仅接受零赋值,以确保即使没有为枚举属性分配任何显式值,也将初始化基于枚举的类型的变量。 但是,编译器不接受任何其他值。 这是一种内在的安全性,但是更重要的是要解决编译器设计中的一个缺陷,以解决以前与枚举不一致的行为。 埃里克·利珀特(Eric Lippert)撰写的这个小故事让我们深入了解了这是如何产生的。
当您声明一个枚举(例如您的问题中的一个)时,实际上是这样的:
public enum myThing : int
{
stuff = 0,
stuff2 = 1,
stuff3 = 2,
stuff4 = 3
}
即, enum
的默认基础类型为int
,并且字段从零开始顺序进行。
奇怪的是,这仅适用于零元素,例如,它适用于:
checkStuff(0);
但这不会
checkStuff(1); //error
您需要明确
checkStuff((myThing)1); //cast int to myThing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.