一般参考枚举值?

时间:2016-02-10 18:11:10

标签: c# enums

我的应用程序中有多个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进行写入。

3 个答案:

答案 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());
}