c# – 方括号在属性中意味着什么?
我正在深入研究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]”这样定义的属性,这是什么意思?动态属性? 我试图在网上搜索,但不知道要搜索什么,我无法得出任何结果/解释. 请帮忙.谢谢 解决方法
我认为这里有两个你不明白的同意(或者我根本不理解你的问题).
这个[..]属性是索引属性.它们像数组表达式一样使用.例如,您可以想象创建自己的“数组”,如下所示: public class MyArray { string[] _storrage = new string[100]; public string this[int index] { get { return _storrage[index]; } set { _storrage[index] = value; } } } 您也可以使用多个参数创建索引属性,并且可以重载它们.例如,某些列表允许您按名称(此[字符串名称])和索引(此[int index])访问项目.实际上它只是语法糖,所以你不必像在java中那样编写像getItem(int index)这样的方法. 另一个似乎你不理解的概念(虽然你的问题不明显)是lambda方法.在你的代码中: (item) => item.GetSelectLink(item.Id) 是一种lambda方法.例如,如果网格对象上的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 [编辑] var list = new List<string>() { "a","b","c" }; list.ForEach((item) => Console.WriteLine(item)); 这将输出“a”,“b”和“c”(见它在http://ideone.com/MGZxfr运行). void Main() { var list = new List<string>() { "a","c" }; foreach(var item in list) Print(item); } void Print(string item) { Console.WriteLine(item); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |