是否可以使用扩展方法来扩展索引器?我希望能够使用标题文本从给定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; } }
我想要类似的索引器。感谢。
答案 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)
不幸的是,没有。这实际上是一个“扩展属性”,不受支持。您必须将它作为一种方法,就像您当前的代码一样。
答案 3 :(得分:1)
不,你不能用扩展方法扩展运算符,比如索引器。
答案 4 :(得分:1)
不,这是不可能的。扩展方法仅限于方法。他们不能提供属性,索引器或构造函数
答案 5 :(得分:0)
作为扩展属性的变通方法,您可以使用基于反射的对象索引器代码为对象实现Getter和Setter Extension方法。