2011-09-02 75 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扩展方法。