如何使用具有扩展方法的索引器具有参数和函数调用

时间:2010-06-25 10:45:07

标签: c# .net extension-methods indexer

是否可以将indexersextension方法一起使用。

例如。仅将其视为一个示例。

    public static object SelectedValue(this DataGridView dgv, string ColumnName)
    {            
        return dgv.SelectedRows[0].Cells[ColumnName].Value;
    }

修改

  1. 使用情况mygrid.SelectedValue("mycol")

  2. 如何将其用作索引器mygrid.SelectedValue["mycol"]而非一个以上。

  3. 是否可以像这样使用它? mygrid.SelectedValue["mycol"](out somevalue);

  4. 获取此类值的语法是什么?任何简单的例子或链接都可以。

2 个答案:

答案 0 :(得分:4)

嗯,这里有两个问题:

  • C#(基本上)不支持命名索引器 1
  • C#不支持扩展属性,因此您无法使SelectedValue属性返回可转换的内容

所以不,你在那里指定的语法不起作用。你可以让它工作:

mygrid.SelectedValue()["mycol"]

但这有点难看。如果我是你,我会坚持使用方法表格。


1 C#4支持在COM对象上调用命名索引器。

答案 1 :(得分:0)

让我试着澄清Extension Method的用法和意图。

考虑Extension Method

public static bool IsNullOrEmpty(this string source)
{
    return source == null || source == string.Empty;
}

现在,您使用此string

扩展Extension Method课程
var myString = "Hello World";
Assert.AreEqual(myString.IsNullOrEmpty(), false);

这就是.NET在编译时所做的事情:

public static bool IsNullOrEmpty(string source)
{
    return source == null || source == string.Empty;
}

使用我们的旧学校

var myString = "Hello World";
Assert.AreEqual(IsNullOrEmpty(myString), false);

扩展方法只不过是我们过去所做的可视化。

嗯,扩展索引器是可能的,但微软没有想到它。