当我调用inter.GetMethods()
时,它会给我一个方法列表包括所有get和set语句。如何检查每个项目(在foreach
中)是否为get或set语句。
foreach (MethodInfo meth in inter.GetMethods()) Console.WriteLine(meth.Name);
答案 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);