TK.*_*TK. 8 c# enums function-parameter
如何调用函数并传入枚举?
例如,我有以下代码:
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!
}
}
Run Code Online (Sandbox Code Playgroud)
虽然当我这样做时,我得到'e1'是'类型'但是使用像'变量'错误消息.有什么想法要帮忙吗?
我试图保持函数通用,以适用于任何Enum而不仅仅是一个特定的类型?这甚至可能吗?...使用通用功能怎么样?这会有用吗?
为什么不通过这种类型?喜欢:
myfunc(typeof(e1));
public void myFunc( Type t )
{
}
Run Code Online (Sandbox Code Playgroud)
您可以使用通用函数:
public void myFunc<T>()
{
var names = Enum.GetNames(typeof(T));
foreach (var name in names)
{
// do something!
}
}
Run Code Online (Sandbox Code Playgroud)
并打电话给:
myFunc<e1>();
Run Code Online (Sandbox Code Playgroud)
(编辑)
如果您尝试约束T
到Enum
或,编译器会抱怨enum
.
因此,为确保类型安全,您可以将功能更改为:
public static void myFunc<T>()
{
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!
}
}
Run Code Online (Sandbox Code Playgroud)
您试图将枚举的类型作为该类型的实例传递 - 尝试这样的事情:
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
}
}
Run Code Online (Sandbox Code Playgroud)