繁体   English   中英

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

[英]How to use indexers with Extension Methods having out parameter and function calls

是否可以使用带extension方法的indexers

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

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

获得这种价值的语法是什么? 任何简单的示例或链接都可以。

嗯,这里有两个问题:

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

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

mygrid.SelectedValue()["mycol"]

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


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

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

考虑Extension Method

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

现在,使用此Extension Method扩展string

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM