C# 是否泛指枚举值?

C# 是否泛指枚举值?,c#,enums,C#,Enums,我的应用程序中有多个enum,枚举多个不同的机器状态。在某个时刻,一个命令和一个状态被传递给一个IO类,该类只需获取该命令和枚举值(作为int)并将其写入IO端口 我正在尝试设计一个函数声明,它接受和enum值,但不是从特定的enum中。我知道我可以让它取一个int值并使用它,但我希望函数的用户被强制传递和enum值。这可能吗 public void WriteCommand(String command, int value) // Works technically public void

我的应用程序中有多个
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) 
    {
        Console.WriteLine(value.ToString());
    }
或者更通用,接受int和其他值类型

public void WriteCommand<T>(String command, T value) where T : struct 
{
    Console.WriteLine(value.ToString());
}
public void WriteCommand(字符串命令,T值),其中T:struct
{
Console.WriteLine(value.ToString());
}

只需设置参数
Enum

只需从

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

你会幸福的;-)

表示所有已创建枚举的基类。因此,您可以传入任何已创建的枚举,但不能传入其他枚举

您还应注意以下几点:

如果没有显式声明基础类型,则使用Int32


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

为什么不根据命令创建多个接口?它们都可以调用使用
int
的相同(私有或任何)基方法。为什么不坚持使用
int值
而使用具有只读属性的静态类呢?例如,您可以用一个具有属性
Value1、Value2
的相应静态类替换您的
MyEnum1
,并将您的int分配给它。查看一下它,它可能是您正在寻找的,这样IO类将实现多个接口(
ICommand1Writer
ICommand2Writer
,等等)每个接口对命令
enum
类型都有特定的函数签名?我想这是可行的,我只是想减少代码,而不是添加更多的接口。但是谢谢你的建议!这对它接受的内容更为宽容。@Servy抱歉-有什么问题吗?你可以传递所有不是枚举的东西,它只需要接受枚举。好的,我误解了这个问题。我想他需要两个版本,取int或enum。,好的,你能看看吗我还对
double
double
的用法或
bool
Boolean
的用法有点混淆。这个区别的名称是什么?为什么有些类型是大写的,而其他类型不是?@KDecker
Enum
是类型的名称
enum
是一个关键字,根本不是一种类型。@KDecker
double
double
的别名,但正如Servy在这里所说,这不适用于
enum
enum
。嗯,尽管我似乎无法将
enum
转换为
int
?编辑:
Convert.ToInt32
看起来应该可以用了。@KDecker只是先将其转换为
对象
public void WriteCommand(String command, Enum value) // Forces enum value to be passed