C# 将枚举成员传递给方法

C# 将枚举成员传递给方法,c#,C#,如何使用枚举成员调用需要int值的方法。我不希望被调用的方法必须知道枚举 public enum Volume : int { Low = 1, Medium = 2, High = 3 } public void Start() { DoSomeWork(Volume.Low); //this complains //this works DoSomething((int)Volume.Low); } public void DoSomeWor

如何使用枚举成员调用需要int值的方法。我不希望被调用的方法必须知道枚举

public enum Volume : int
{
    Low = 1,
    Medium = 2,
    High = 3
}

public void Start() {
    DoSomeWork(Volume.Low);  //this complains
    //this works  DoSomething((int)Volume.Low);

}

public void DoSomeWork(int vol) {
    //Do something
}

将其显式转换为
int
(正如您已经了解的那样):

禁止从枚举隐式转换为基础类型,因为在很多情况下,这种转换没有意义@EricLippert对此解释得很好

但是,如果不使用枚举,为什么要引入它?如果程序中的卷速率由enum指定,则这是您的方法作为参数应该期望的类型。

如下调用:

DoSomeWork( (int) Volume.Low );

为什么不采用这种方式:

public void DoSomeWork(Volume volume) {
    //Do something
}

如文件所述

每个枚举类型都有一个基础类型,可以是除char之外的任何整数类型。枚举元素的默认基础类型为int。

因此,您可以简单地将其转换为int,并以这种方式将其传递给方法

DoSomeWork((int)Volume.Low);

这个问题你自己有答案。为什么还要问这个问题?话虽如此,让方法接受枚举会更好。让它接受一个神奇的int会让需要记住int是什么意思的调用方非常困惑。是的,但我不这么认为。编译器是否应该知道Volume.Low是int类型,特别是因为我设置了枚举的基类型?@bitshift,请查看带有一些解释的更新。好了,现在我查找了它,枚举成员和int可能是相同的int类型,它们需要显式转换才能从一个转换到另一个。
DoSomeWork((int)Volume.Low);