C#扩展索引器?

时间:2011-09-02 16:04:29

标签: c# datagridview indexer

是否可以使用扩展方法来扩展索引器?我希望能够使用标题文本从给定DataGridViewRow的DataGridViewCell获取单元格的值,如下所示:


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

我想要类似的索引器。感谢。

6 个答案:

答案 0 :(得分:11)

索引器实际上是属性,C#中不存在扩展属性。所以这不可能按照你想要的方式完成。

有关该主题的一些背景知识,请参阅this blog post,并解释为何考虑该功能,但最终在C#3.0中省略。

答案 1 :(得分:5)

不,不是。扩展方法只是静态方法调用的语法糖,索引器是属性。

否则

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

相当于

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

扩展方法不会以任何方式更改类,它们只是为您提供了一个更简单的接口来调用静态方法。

答案 2 :(得分:2)

不幸的是,没有。这实际上是一个“扩展属性”,不受支持。您必须将它作为一种方法,就像您当前的代码一样。

请注意,已在multiple occasions上的Connect上请求了扩展程序属性,但从未包含在该语言中。

答案 3 :(得分:1)

不,你不能用扩展方法扩展运算符,比如索引器。

答案 4 :(得分:1)

不,这是不可能的。扩展方法仅限于方法。他们不能提供属性,索引器或构造函数

答案 5 :(得分:0)

作为扩展属性的变通方法,您可以使用基于反射的对象索引器代码为对象实现Getter和Setter Extension方法。