簡體   English   中英

方括號在屬性中意味着什么?

[英]what does square bracket means [] in a property?

我正在深入研究MVC 4 WebGrid的代碼,我發現它被用作這個

    grid.Column("Id", format: (item) => item.GetSelectLink(item.Id)),

我不確定“item”參數是什么,所以我查看了源代碼,看起來它是一個“WebGridRow”類。 對我來說問題是,上面的代碼正在尋找一個“.Id”屬性,但它在類中不存在。 唯一一個靠近它的地方看起來像是下面的

public object this[string name]
        {
            get
            {
                if (String.IsNullOrEmpty(name))
                {
                    throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "name");
                }
                object value = null;
                if (!TryGetMember(name, out value))
                {
                    throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                      HelpersResources.WebGrid_ColumnNotFound, name));
                }
                return value;
            }
        }

我從未見過像“this [string name]”這樣定義的屬性,這是什么意思? 動態屬性?

我試圖在網上搜索,但不知道要搜索什么,我無法得出任何結果/解釋。

請幫忙。 謝謝

我認為這里有兩個你不明白的同意(或者我根本不理解你的問題)。

this[..]屬性是索引屬性。 它們像數組表達式一樣使用。 例如,您可以想象創建自己的“數組”,如下所示:

public class MyArray {
     string[] _storrage = new string[100];
     public string this[int index] {
         get { return _storrage[index]; }
         set { _storrage[index] = value; }
     }
}

您也可以使用多個參數創建索引屬性,並且可以重載它們。 例如,某些列表允許您按名稱( this[string name] )和索引( this[int index] )訪問項目。 實際上它只是語法糖,所以你不必像在java中那樣編寫像getItem(int index)這樣的方法。

另一個似乎你不理解的概念(雖然你的問題不明顯)是lambda方法。 在你的代碼中:

(item) => item.GetSelectLink(item.Id)

是一種lambda方法。 例如,如果grid上的Colum方法具有以下簽名:

public void Column<T>(string name, Func<T, string>)

表達式(item) => item.GetSelectLink(item.Id)將計算一個接受T並返回字符串的方法。 另一種創建相同功能的方法是:

// in class
public string GetIdField(YourClassType item) { return item.GetSelectLink(item.Id); }

// in Column-call
grid.Column("Id", format: GetIdField);

你可以在這里閱讀更多關於lambdas的信息: http//msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx

[編輯]
要顯示一個lambda的快速示例,可能會對此有所了解:

var list = new List<string>() { "a", "b", "c" };
list.ForEach((item) => Console.WriteLine(item));

這將輸出“a”,“b”和“c”(參見http://ideone.com/MGZxfr )。 等效(不使用lambda)將是這樣的:

void Main() {
    var list = new List<string>() { "a", "b", "c" };
    foreach(var item in list) Print(item);
}

void Print(string item) { Console.WriteLine(item); }

它不是一個屬性,而是一個[]運算符。
當你做這樣的事情時,將調用get方法:

var a = Ob["hello"]

set

ob["hello"] = 5

它是一個索引器MSDN為您提供服務

這稱為索引器您也可以創建自己的索引器屬性。

它通常用於諸如Array,List或Dictionary之類的集合中。

http://msdn.microsoft.com/en-us/library/vstudio/6x16t2tx.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM