6

是否可以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 回答 2

4

好吧,这里有两个问题:

  • C# 不(大体上)支持命名索引器1
  • C# 不支持扩展属性,因此您不能使SelectedValue属性返回可索引的东西

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

mygrid.SelectedValue()["mycol"]

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


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

于 2010-06-25T10:47:12.410 回答
0

让我尝试澄清Extension Method.

考虑一个Extension Method

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

现在你用这个扩展你的stringExtension 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);

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

好吧,扩展索引器是可能的,但微软没有考虑过。

于 2010-06-25T11:01:01.310 回答