我的应用程序中有多个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进行写入。
答案 0 :(得分:1)
只需更改
中的代码即可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
的枚举。在这种情况下,您应该在将值写入设备之前注意如何解释和转换值。
答案 1 :(得分:0)
只需输入参数Enum
。
答案 2 :(得分:-2)
如果你想严格要求:
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());
}