[英]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.