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

发布于 2024-09-06 20:17:33 字数 568 浏览 13 评论 0原文

是否可以将索引器扩展方法一起使用。

例如。仅将其视为示例。

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

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

Is it possible to use indexers with extension methods.

eg. Consider it as an example only.

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

EDIT

  1. usage mygrid.SelectedValue("mycol")

  2. How to use it as an indexer mygrid.SelectedValue["mycol"] rather than above one.

  3. Is it possible to use it like this as well ? mygrid.SelectedValue["mycol"](out somevalue);

What are the syntax of getting this kind of values. Any simple example or link will work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灯角 2024-09-13 20:17:33

好吧,这里有两个问题:

  • C#(总的来说)不支持命名索引器1
  • C# 不支持扩展属性,因此您无法创建 SelectedValue返回可索引内容的属性

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

mygrid.SelectedValue()["mycol"]

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


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

Well, there are two issues here:

  • C# doesn't (by and large) support named indexers1
  • C# doesn't support extension properties, so you can't make SelectedValue a property returning something indexable instead

So no, the syntax you've specified there won't work. You could get this to work:

mygrid.SelectedValue()["mycol"]

but that's a bit ugly. I'd stick with the method form if I were you.


1 C# 4 supports calling named indexers on COM objects.

谁人与我共长歌 2024-09-13 20:17:33

让我尝试阐明扩展方法的用法和意图。

考虑扩展方法

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

现在,您可以使用此扩展方法扩展您的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);

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

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

Let me try to clarify the usage and intentions of Extension Method.

Consider a Extension Method

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

Now you extend your string class with this Extension Method

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

This is what .NET does on compilation:

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

Using our old school

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

Extension method is nothing but a visualization to what we were used to do.

Well, extending indexers could be possible but Microsoft did not think about it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文