當我呼叫inter.GetMethods()
時,它給出了我所有的get和set語句的方法列表,包括。我如何檢查每個項目(在foreach
中)是否爲get或set語句。Interface.GetMethods()在c#中包含get和set語句
foreach (MethodInfo meth in inter.GetMethods()) Console.WriteLine(meth.Name);
當我呼叫inter.GetMethods()
時,它給出了我所有的get和set語句的方法列表,包括。我如何檢查每個項目(在foreach
中)是否爲get或set語句。Interface.GetMethods()在c#中包含get和set語句
foreach (MethodInfo meth in inter.GetMethods()) Console.WriteLine(meth.Name);
不完全是最優雅的,但它的工作原理:
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);
謝謝,這很好。我最終做的是檢查他們的姓名開頭是否有'get_'或'set_'。我知道這不會失明。 –
@ArlenBeiler我不會那樣做;似乎太脆弱了。一方面,你可以合法地將一個非屬性方法加上「get _....」。另一方面,我可能錯了,編譯的名稱可能無法保證.NET/mono的不同實現或未來的版本。但是,如果它適合你,去爲它! –
是沒可能使用['的getMethods(*超載*)'](http://msdn.microsoft.com/ en-us/library/4d848zkb.aspx),它需要'BindingFlags'並從頭開始排除屬性? – 2012-11-16 02:07:18
你能展示你的代碼嗎? –
有我的代碼。你能告訴我如何? –