С# перечисления как параметры функции?
Можете ли вы передать стандартное перечисление С# в качестве параметра?
Например:
enum e1
{
//...
}
enum e2
{
//...
}
public void test()
{
myFunc( e1 );
myFunc( e2 );
}
public void myFunc( Enum e )
{
// Iterate through all the values in e
}
Сделав это, я надеюсь получить все имена в любом заданном перечислении. Как выглядит код Iteration?
Ответы
Ответ 1
Это
public void Foo(Enum e)
{
var names = Enum.GetNames(e.GetType());
foreach (var name in names)
{
// do something!
}
}
РЕДАКТИРОВАТЬ: Мой плохой, вы сказали, что итерации.
Примечание. Я знаю, что могу просто вызвать вызов GetNames() в своем предложении foreach, но я предпочитаю сначала назначать этот тип метода вызову метода, поскольку он удобен для отладки.
Ответ 2
Используйте метод Enum.GetNames(typeof (e)), это вернет массив строк с именами.
Вы также можете использовать Enum.GetValues для получения эквивалентных значений.
Edit -Whoops - если вы передаете параметр как Enum, вам нужно будет использовать e.GetType() вместо typeof(), который вы использовали бы, если бы вы передали параметр в качестве фактического имени типа Enum.
Ответ 3
Вы имеете в виду что-то вроде Enum.GetNames?
Ответ 4
Enum.GetValues
Enum.GetNames
так что-то вроде...
foreach(e1 value in Enum.GetValues(typeof(e1)))
Ответ 5
У вас возникнут проблемы, если вы попытаетесь передать enum
непосредственно на myFunc
, как в следующем примере:
enum e1 {something, other};
myFunc(e1); // Syntax error: "e1 is a type, but is being used like a variable"
Ответ 6
Вот так:
public void myFunc(Enum e)
{
foreach (var name in Enum.GetNames(typeof(e)))
{
Console.WriteLine(name);
}
}
Ответ 7
правильный:
public void myFunc(Enum e)
{
foreach (var name in Enum.GetNames(e.GetTye()))
{
Console.WriteLine(name);
}
}