public enum OperateType { Success = 1, Fail = 0, } typeof(OperateType).GetMethods("TryParse",new Type[]{typeof(string),typeof(OperateType).MakeByRefType()}); typeof(OperateType).GetMethods("TryParse").FirstOrDefault(x => x.Name == "TryParse" && x.GetParemeteres().Length == 2) //以上两种方式都获取不到tryparse方法,监视GetMethods的返回值的时候,也没见着TryParse,不知道怎么回事 |
|
40分 |
TryParse 方法不是在OperateType 这个对像里的。
他是一个Enum静太方法。你应是从Enum中去取 |
40分 |
Type temp = typeof (System.Enum);
MethodInfo methods = temp.GetMethod(); 这里面有TryParse. |
晕,少了个s
Type temp = typeof (System.Enum); 这里面有TryParse. |
|
再晕,返回类型也错了
Type temp = typeof (System.Enum); |
|
40分 |
静态类就应该找相应的位置
Enum是对具体的enum的一些相关静态方法支持 |
父类的方法只能去父类找?
|
|
40分 |
首先反射可以找到基类中的方法。 但是,枚举类型比较特殊,运行时,它实际基类并非Enum,而是int,long之类的类型,这些类型也有TryParse ,但显然这些TryParse 并非你需要的。 |
40分 |
因为TryParse是静态函数,因此绑定参数为BindingFlags.Static;
因为TryParse定义在祖先(父)类,因此要BindingFlags.FlattenHierarchy: var methodInfo = typeof(OperateType) .GetMethods(BindingFlags.Static | BindingFlags.FlattenHierarchy | BindingFlags.Public) .First(x => x.Name == "TryParse" && x.GetParameters().Length == 2); methodInfo = methodInfo.MakeGenericMethod(typeof(OperateType)); object[] parameters = new object[]{"Success", null}; methodInfo.Invoke(null, parameters); OperateType result = (OperateType)parameters[1]; // OperateType.Success |