繁体   English   中英

通过参数将C#中的枚举类变量传递给函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM