Interface.GetMethods()包括c#中的get和set语句

时间:2012-11-16 02:05:42

标签: c# .net-4.0

当我调用inter.GetMethods()时,它会给我一个方法列表包括所有get和set语句。如何检查每个项目(在foreach中)是否为get或set语句。

foreach (MethodInfo meth in inter.GetMethods()) Console.WriteLine(meth.Name);

1 个答案:

答案 0 :(得分:2)

不是最优雅,但它有效:

List<MethodInfo> propertyGetterSetters = new List<MethodInfo>();
foreach(PropertyInfo prop in typeof(MyType).GetProperties())
{
    var getter = prop.GetGetMethod();
    var setter = prop.GetSetMethod();

    if (getter != null)
        propertyGetterSetters.Add(getter);

    if (setter != null)
        propertyGetterSetters.Add(setter);
}


List<MethodInfo> nonPropertyMethods = typeof(MyType).GetMethods().Except(propertyGetterSetters).ToList();

你也可以使用MethodInfo.IsSpecialName,但这也可以用于除了属性之外的其他特殊情况,但是如果你有一个简单的类可以测试并看到它有效,你可以用它代替。我不推荐它;我宁愿只使用像上面那样的实用方法:

var nonPropertyMethods = typeof(MyType).GetMethods().Where(m => !m.IsSpecialName);