2011-09-02 74 views
4

是否可以使用擴展方法來擴展索引器?我希望能夠利用標題文字像這樣從給定的DataGridViewRow的DataGridViewCell的獲取單元格的值:C#擴展索引器?

 

    object o = row["HeaderText"]; 

我有這樣的代碼

 

    public static class Ext 
    { 
     public static object Cells(this DataGridViewRow r, string header) 
     { 
      foreach (DataGridViewCell c in r.Cells) 
      { 
       if (c.OwningColumn.HeaderText == header) 
       { 
        return c.Value; 
       } 
      } 
      return null; 
     } 
    } 

,我想類似的索引。謝謝。

回答

8

索引器實際上是屬性,C#中不存在擴展屬性。所以這不能按照你想要的方式完成。

請參閱this blog post瞭解有關該主題的某些背景知識,並解釋爲什麼要考慮該功能,但最終從C#3.0中省略了該功能。

1

不,你不能擴展運算符,如索引器,擴展方法。

2

不幸的是,沒有。這實際上是一個「擴展屬性」,不支持。您必須將其作爲一種方法,就像您當前的代碼一樣。

請注意擴展屬性已請求連接multipleoccasions,但從未包含在該語言中。

1

不,這是不可能的。擴展方法僅限於方法。他們不能提供物業,指數或建設者

4

不,它不是。擴展方法只是靜態方法調用的語法糖,索引器是一個屬性。

object o = new object(); 
o.ExtensionMethod(); 

相當於

object o = new object(); 
Extensions.ExtensionMethod(o); 

擴展方法不改變類以任何方式,他們只是爲你提供一個簡單的接口來調用靜態方法。

0

作爲擴展屬性的解決方法,您可以使用基於反射的對象索引器代碼實現對象的Getter和Setter擴展方法。