簡體   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