我以为我对匿名类型有很好的理解,但这个小代码片段让我有些困惑:
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);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我被允许分配第二个值result.我的意思是不是匿名类型是不可变的,它们在获得初始值后无法更改?
Hab*_*bib 11
首先,没有涉及匿名类型.
这string[] arr = { "Agnes", "Allan", "Benny" };是一个数组创建表达式.
result是IEnumerable<string>和在两个LINQ语句中,您只是创建一个查询.
这是怎么回事:
数组创建表达式
string[] arr = { "Agnes", "Allan", "Benny" };
Run Code Online (Sandbox Code Playgroud)
查询arr并返回 IEnumerable<string>
var result = arr.Where(a => a.StartsWith("A")).Select(a => a);
Run Code Online (Sandbox Code Playgroud)
在arr返回时为结果分配一个新查询 IEnumerable<string>
result = arr.Where(a => a.EndsWith("n")).Select(a => a);
Run Code Online (Sandbox Code Playgroud)
至于理解不变性,想想String看看这篇文章:不可变类型:了解它们的好处并使用它们