使用反射获取类方法的代码(不包括ToString(),Equals,Hasvalue等系统方法。)

时间:2017-11-07 14:55:52

标签: c# wsdl system.reflection

enter image description here

我正在研究一个wcf代理生成器,它使用c#动态生成所有方法。我得到以下方法,我只需要选择前两个方法。

反射中的GetMethods()返回我不需要的所有方法(包括ToString,Hasvalue,Equals等)(即由我定义的实际类型)

提前致谢

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你需要以下方法:

  • 不是getter / setter方法,可以使用属性
  • 是根据实际类型定义的,而不是基本类型
  • 没有返回类型void

    var proxyType = proxyinstance.GetType();
    var methods = proxyType.GetMethods()
        .Where(x => !x.IsSpecialName) // excludes property backing methods
        .Where(x => x.DeclaringType == proxyType) // excludes methods declared on base types
        .Where(x => x.ReturnType != typeof(void)); // excludes methods which return void
    

所有这些条件也可以合并为一个Where电话:

var methods = proxyType.GetMethods().Where(x => 
    !x.IsSpecialName && 
    x.DeclaringType == proxyType && 
    x.ReturnType != typeof(void)
);