1

入力パラメーターの 1 つが内部 Enum である内部メソッドを取得しました。列挙値を取得してメソッドに渡すにはどうすればよいですか?

例:

internal enum MyEnum
{
    One,
    Two,
    Three
}


internal int InternalTest(string test, MyEnum enumTest)
{
    return test.Length;
}

そして、次のようなものによって取得されます:

MethodInfo addInternal = typeof(Class1).GetMethod("InternalTest", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(string), typeof(?????) }, null);

ありがとう!

イヴァル

4

3 に答える 3

3

それが別のアセンブリにある場合、型を取得するには名前を指定する必要があります。

Type type = assembly.GetType("SomeNamespace.SomeType+SomeNestedType");

(例から)次のようになります。

Type type = typeof(Class1).Assembly.GetType("Class1+MyEnum");

より興味深い質問は、列挙型の(正しい型にボックス化) を取得する方法です。次のようなものが必要です。

object val = Enum.ToObject(type, 123);
于 2012-10-21T09:09:50.603 に答える
2

試してみてくださいtypeof(Class1).GetNestedTypes()。MyEnum のように、Class1 にネストされたすべての型のリストを返す必要があります。ネストされた型のリストを調べて、MyEnum 型を見つけて GetMethod に渡します。

MSDN の GetNestedTypes ドキュメント: http://msdn.microsoft.com/en-us/library/system.type.getnestedtypes(v=vs.100).aspx

GetNestedType()型名と特定のネストされた型を名前で検索できるいくつかの BindingFlags を受け入れるメソッドもあります。

リフレクションを使用して列挙型の値を取得するには、次を使用します。

object enumValue = myEnumType.GetField("ValueName", BindingFlags.Static | BindingFlags.Public);
于 2012-10-21T09:07:30.663 に答える
-1

GetNestedTypes()メソッドを呼び出して取得します。

Type type = typeof(Program).GetNestedTypes().FirstOrDefault(x => x.IsEnum);

これは、型の (任意の) 列挙型を返します。名前などで検索したい場合は、別のラムダを使用してください。

于 2012-10-21T09:13:53.487 に答える