2011-02-10 23 views

回答

6

我更喜歡使用PropertyInfo.GetIndexParameters

var indexers = targetType.GetProperties(bindingFlags) 
         .Where(p => p.GetIndexParameters().Any()); 
         .Select(p => p.GetGetMethod()); 

現在indexers爲符合bindingFlags給出指定BindingFlags該索引的干將的IEnumerable<MethodInfo>

注意如何代碼讀起來就像從targetType,得到匹配bindingFlags的性質,採取那些索引器,然後投射到吸氣。它比使用魔術字符串"get_Item"要神祕得多,並且很容易處理多個索引器。

如果你知道只有一個,你當然可以使用Single。如果您正在尋找特定的一個,您可以相應地檢查GetIndexParameters的結果。

+0

我想MethodInfo,而不是PropertyInfo。 – smartcaveman 2011-02-10 01:01:45

+0

@smartcaveman:哇。對我上面給出的內容使用PropertyInfo.GetGetMethod。 – jason 2011-02-10 01:59:39

2

正確的方法是檢索該類的DefaultItemAttribute。它具有索引器屬性的名稱。它不一定是「Item」,VB.NET等語言允許指定任何屬性作爲索引器。 Jason的代碼也會失敗,可能會有多個索引屬性。但只有一個默認值。