0

を呼び出すと、すべてのgetステートメントとsetステートメントを含むinter.GetMethods()メソッドのリストが表示されます。(内の)各項目がgetまたはsetステートメントであるかどうかを確認するにはどうすればよいですか。foreach

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

1 に答える 1

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);

于 2012-11-16T02:29:30.223 に答える