c#扩展索引器
本文关键字:索引 扩展 | 更新日期: 2023-09-27 18:07:16
是否可以使用扩展方法来扩展索引器?我希望能够从给定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;
}
}
和我想要类似的索引器。谢谢。
索引器实际上是属性,而扩展属性在c#中不存在。所以这不能按你想要的方式完成。
不,不是。扩展方法只是静态方法调用的语法糖,索引器是一个属性。
做object o = new object();
o.ExtensionMethod();
等价于
object o = new object();
Extensions.ExtensionMethod(o);
扩展方法不以任何方式改变类,它们只是提供一个更简单的接口来调用静态方法。
遗憾的是,没有。这实际上是一个不受支持的"扩展属性"。你必须把它作为一个方法,就像你当前的代码一样。
请注意,扩展属性在连接中多次被请求,但从未被包含在语言中。
不能使用扩展方法扩展操作符,例如索引器。
这是不可能的。扩展方法仅限于方法。它们不能提供属性、索引器或构造函数
作为扩展属性的变通方法,您可以使用基于反射的对象索引器代码为对象实现Getter和Setter扩展方法。