我有一个内部方法,其中一个输入参数是内部枚举。如何获取枚举值并将其传递给方法?
示例:
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);
谢谢!
的Ivar
答案 0 :(得分:3)
如果它在不同的程序集中,那么获取类型必须是名称,例如;
Type type = assembly.GetType("SomeNamespace.SomeType+SomeNestedType");
可能是(来自示例):
Type type = typeof(Class1).Assembly.GetType("Class1+MyEnum");
一个更有趣的问题是:如何获得枚举的值(加密到正确的类型) - 你需要这样的东西:
object val = Enum.ToObject(type, 123);
答案 1 :(得分: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);
答案 2 :(得分:-1)
通过调用GetNestedTypes()
方法获取它:
Type type = typeof(Program).GetNestedTypes().FirstOrDefault(x => x.IsEnum);
这将返回类型中的(任意)枚举。如果你想通过名字或其他东西找到它,请使用不同的lambda。