c# – 如果匿名类型应该是不可变的,为什么可以更改它?
发布时间:2020-12-15 19:39:47 所属栏目:百科 来源:网络整理
导读:我以为我对匿名类型有很好的理解,但这个小代码片段让我有些困惑: string[] arr = { "Agnes","Allan","Benny" };var result = arr.Where(a = a.StartsWith("A")).Select(a = a);// Why can I do the below,if arr is immutable?result = arr.Where(a = a.End
我以为我对匿名类型有很好的理解,但这个小代码片段让我有些困惑:
string[] arr = { "Agnes","Allan","Benny" }; var result = arr.Where(a => a.StartsWith("A")).Select(a => a); // Why can I do the below,if arr is immutable? result = arr.Where(a => a.EndsWith("n")).Select(a => a); 我不明白为什么我被允许为结果分配第二个值.我的意思是不是匿名类型是不可变的,它们在获得初始值后无法更改? 解决方法
首先,没有涉及
anonymous type.
这个字符串[] arr = {“Agnes”,“Allan”,“Benny”};是array creation expression. 结果是IEnumerable< string>在两个LINQ语句中,您只是创建一个查询. 这是怎么回事: 数组创建表达式 string[] arr = { "Agnes","Benny" }; query arr并返回IEnumerable< string> var result = arr.Where(a => a.StartsWith("A")).Select(a => a); 在arr上为结果分配一个新查询,返回IEnumerable< string> result = arr.Where(a => a.EndsWith("n")).Select(a => a); 至于理解不变性,想想String也会看到这篇文章:Immutable types: understand their benefits and use them (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |