加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读