在反射枚举类型的时候,为什么获取不到TryParse方法??

跳动de指尖 2015-04-20 11:46:26
  
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,不知道怎么回事

...全文
207 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2015-04-20
  • 打赏
  • 举报
回复
TryParse 方法不是在OperateType 这个对像里的。 他是一个Enum静太方法。你应是从Enum中去取
Forty2 2015-04-20
  • 打赏
  • 举报
回复
因为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
wjq 2015-04-20
  • 打赏
  • 举报
回复
引用 6 楼 moonwrite 的回复:
父类的方法只能去父类找?
首先反射可以找到基类中的方法。 但是,枚举类型比较特殊,运行时,它实际基类并非Enum,而是int,long之类的类型,这些类型也有TryParse ,但显然这些TryParse 并非你需要的。 针对枚举类型,还是用Enum.TryParse 处理。
moonwrite 2015-04-20
  • 打赏
  • 举报
回复
父类的方法只能去父类找?
  • 打赏
  • 举报
回复
静态类就应该找相应的位置 Enum是对具体的enum的一些相关静态方法支持
宝_爸 2015-04-20
  • 打赏
  • 举报
回复
再晕,返回类型也错了 Type temp = typeof (System.Enum); MethodInfo[] methods = temp.GetMethods();
宝_爸 2015-04-20
  • 打赏
  • 举报
回复
晕,少了个s Type temp = typeof (System.Enum); MethodInfo methods = temp.GetMethods(); 这里面有TryParse.
宝_爸 2015-04-20
  • 打赏
  • 举报
回复
Type temp = typeof (System.Enum); MethodInfo methods = temp.GetMethod(); 这里面有TryParse.

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧