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
的用法有点混淆。这个区别的名称是什么?为什么有些类型是大写的,而其他类型不是?@KDeckerEnum
是类型的名称enum
是一个关键字,根本不是一种类型。@KDeckerdouble
是double
的别名,但正如Servy在这里所说,这不适用于enum
和enum
。嗯,尽管我似乎无法将enum
转换为int
?编辑:Convert.ToInt32
看起来应该可以用了。@KDecker只是先将其转换为对象
。
public void WriteCommand(String command, Enum value) // Forces enum value to be passed