您可以将标准的 c# 枚举作为参数传递吗?
例如:
enum e1
{
//...
}
enum e2
{
//...
}
public void test()
{
myFunc( e1 );
myFunc( e2 );
}
public void myFunc( Enum e )
{
// Iterate through all the values in e
}
通过这样做,我希望检索任何给定枚举中的所有名称。迭代代码会是什么样子?
您可以将标准的 c# 枚举作为参数传递吗?
例如:
enum e1
{
//...
}
enum e2
{
//...
}
public void test()
{
myFunc( e1 );
myFunc( e2 );
}
public void myFunc( Enum e )
{
// Iterate through all the values in e
}
通过这样做,我希望检索任何给定枚举中的所有名称。迭代代码会是什么样子?
这!
public void Foo(Enum e)
{
var names = Enum.GetNames(e.GetType());
foreach (var name in names)
{
// do something!
}
}
编辑:我的错,你确实说iterate。
注意:我知道我可以在我的 foreach 语句中调用 GetNames(),但我更喜欢先将这种类型的东西分配给方法调用,因为它便于调试。
使用 Enum.GetNames( typeof(e) ) 方法,这将返回带有名称的字符串数组。
您还可以使用 Enum.GetValues 来获取对应值。
编辑 -Whoops - 如果您将参数作为 Enum 传递,则需要使用 e.GetType() 而不是 typeof() ,如果您将参数作为实际 Enum 类型名称传递,您将使用它。
你的意思是像 Enum.GetNames 这样的东西?
枚举.GetValues 枚举.GetNames
所以像...
foreach(e1 value in Enum.GetValues(typeof(e1)))
如果您尝试将一个enum
直接传递给,您将遇到麻烦myFunc
,如下例所示:
enum e1 {something, other};
myFunc(e1); // Syntax error: "e1 is a type, but is being used like a variable"
像这样:
public void myFunc(Enum e)
{
foreach (var name in Enum.GetNames(typeof(e)))
{
Console.WriteLine(name);
}
}
正确的是:
public void myFunc(Enum e)
{
foreach (var name in Enum.GetNames(e.GetTye()))
{
Console.WriteLine(name);
}
}