標準の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!
}
}
編集:私の悪い、あなたしました言う反復。
注:foreachステートメントでGetNames()呼び出しを実行できることはわかっていますが、デバッグに便利なため、最初にそのタイプのものをメソッド呼び出しに割り当てることをお勧めします。
Enum.GetNames(typeof(e))メソッドを使用します。これにより、名前を含む文字列の配列が返されます。
Enum.GetValuesを使用して、対応する値を取得することもできます。
編集-フープ-パラメータを列挙型として渡す場合は、実際の列挙型名としてパラメータを渡した場合に使用するtypeof()の代わりにe.GetType()を使用する必要があります。
Enum.GetNamesのような意味ですか?
Enum.GetValues Enum.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);
}
}