11

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

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

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

4

6 回答 6

17

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

有关该主题的一些背景信息,请参阅此博客文章,并解释为什么考虑了该功能,但最终从 C# 3.0 中省略了。

于 2011-09-02T16:06:52.250 回答
6

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

正在做

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

相当于

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

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

于 2011-09-02T16:06:58.417 回答
2

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

请注意,已多次在 Connect 上请求扩展属性 从未包含在语言中。

于 2011-09-02T16:06:50.537 回答
1

不,您不能使用扩展方法扩展运算符,例如索引器。

于 2011-09-02T16:06:27.277 回答
1

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

于 2011-09-02T16:06:55.700 回答
0

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

于 2012-11-14T08:38:49.423 回答