c#扩展索引器

本文关键字:索引 扩展 | 更新日期: 2023-09-27 18:07:16

是否可以使用扩展方法来扩展索引器?我希望能够从给定DataGridViewRowDataGridViewCell中获得单元格的值,使用这样的标题文本:

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

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

c#扩展索引器

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

请参阅这篇博客文章,了解有关该主题的一些背景知识,并解释为什么考虑了该特性,但最终在c# 3.0中被省略了。

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

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

等价于

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

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

遗憾的是,没有。这实际上是一个不受支持的"扩展属性"。你必须把它作为一个方法,就像你当前的代码一样。

请注意,扩展属性在连接中多次被请求,但从未被包含在语言中。

不能使用扩展方法扩展操作符,例如索引器。

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

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