1

我有一个内部方法,其中一个输入参数是内部枚举。如何获取枚举值并将其传递给方法?

例子:

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()。它应该返回嵌套到 Class1 中的所有类型的列表 - 就像 MyEnum 一样。因此,查看嵌套类型列表,找到 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);

这将返回类型中的(任意)枚举。如果您想通过名称或其他内容找到它,请使用不同的 lambda。

于 2012-10-21T09:13:53.487 回答