作为这个问题的后续.
如何调用函数并传入枚举?
例如,我有以下代码:
enum e1 { //... } public void test() { myFunc( e1 ); } public void myFunc( Enum e ) { var names = Enum.GetNames(e.GetType()); foreach (var name in names) { // do something! } }
虽然当我这样做时,我得到'e1'是'类型'但是使用像'变量'错误消息.有什么想法要帮忙吗?
我试图保持函数通用,以适用于任何Enum而不仅仅是一个特定的类型?这甚至可能吗?...使用通用功能怎么样?这会有用吗?
为什么不通过这种类型?喜欢:
myfunc(typeof(e1)); public void myFunc( Type t ) { }
您可以使用通用函数:
public void myFunc() { var names = Enum.GetNames(typeof(T)); foreach (var name in names) { // do something! } }
并打电话给:
myFunc();
(编辑)
如果您尝试约束T
到Enum
或,编译器会抱怨enum
.
因此,为确保类型安全,您可以将功能更改为:
public static void myFunc() { Type t = typeof(T); if (!t.IsEnum) throw new InvalidOperationException("Type is not Enum"); var names = Enum.GetNames(t); foreach (var name in names) { // do something! } }
您试图将枚举的类型作为该类型的实例传递 - 尝试这样的事情:
enum e1 { foo, bar } public void test() { myFunc(e1.foo); // this needs to be e1.foo or e1.bar - not e1 itself } public void myFunc(Enum e) { foreach (string item in Enum.GetNames(e.GetType())) { // Print values } }