C# 扩展索引器?

C# 扩展索引器?,c#,datagridview,indexer,C#,Datagridview,Indexer,是否可以使用扩展方法来扩展索引器?我希望能够使用如下标题文本从给定的DataGridViewRow的DataGridViewCell中获取单元格的值: object o = row["HeaderText"]; 我有这个密码 public static class Ext { public static object Cells(this DataGridViewRow r, string header) { foreach (DataGridViewCell

是否可以使用扩展方法来扩展索引器?我希望能够使用如下标题文本从给定的
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;
    }
}

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

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

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


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

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


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

不,这是不可能的。扩展方法仅限于方法。它们不能提供属性、索引器或构造函数不,它不是。扩展方法只是静态方法调用的语法糖,索引器是一个属性

相当于

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

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

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

索引器是C#中的一个运算符!
object o = new object();
Extensions.ExtensionMethod(o);