一般指枚举值

本文关键字:枚举 一般指 | 更新日期: 2023-09-27 18:34:00

我的应用程序中有多个enum枚举多个不同的机器状态。在某些时候,命令和状态被传递给 IO 类,该类应该简单地获取命令和枚举值(作为 int)并将其写入 IO 端口。

我正在尝试设计一个函数声明,该声明获取并enum值,尽管不是来自特定enum。我知道我可以让它取一个int值并使用它,但我希望函数的用户被迫传递并enum值。这可能吗?

public void WriteCommand(String command, int value)  // Works technically
public void WriteCommand(String command, enum value) // Forces enum value to be passed

只是为了清楚说我有两个枚举

public enum MyEnum1 { VALUE1, VALUE2 };
public enum MyEnum2 { VALUE3, VALUE4 }; 

我希望能够像这样将值从每个枚举传递给函数

WriteCommand("DoSomething", MyEnum1.VALUE1);
WriteCommand("DoSomething", MyEnum2.VALUE3);

收到后,我会将enum值转换为 int 进行写入。

一般指枚举值

只需将代码从

public void WriteCommand(String command, enum value) // Forces enum value to be passed

public void WriteCommand(String command, Enum value) // Forces enum value to be passed

你会很高兴的;-)

System.Enum表示所有创建的枚举的基类。因此,您将能够传入任何创建的枚举,但不能传递其他枚举。

您还应该注意以下几点:

如果未显式声明基础类型,则使用 Int32。

因此,您可能捕获了一个枚举,其中基类不是Int32。在这种情况下,在将值写入设备之前,应注意如何解释和强制转换值。

只需将参数设为Enum 即可。

如果你想严格要求:

 public void WriteCommand(String command, Enum value) 
    {
        Console.WriteLine(value.ToString());
    }

或更通用的,接受 int 和其他值类型

public void WriteCommand<T>(String command, T value) where T : struct 
{
    Console.WriteLine(value.ToString());
}