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

在C#中更新List中结构的属性

发布时间:2020-12-15 05:40:30 所属栏目:百科 来源:网络整理
导读:我有一个List Cat其中Cat是具有Id和Name的结构. 如何更改ID为7的猫的名称? 我做了(没想到) var myCat = catList.Single(c = c.Id == 7);mycat.Name = "Dr Fluffykins"; 但当然,结构是价值类型.那么是否可以使用这样的技术,或者我是否必须将.Single变为for循
我有一个List< Cat>其中Cat是具有Id和Name的结构.

如何更改ID为7的猫的名称?

我做了(没想到)

var myCat = catList.Single(c => c.Id == 7);

mycat.Name = "Dr Fluffykins";

但当然,结构是价值类型.那么是否可以使用这样的技术,或者我是否必须将.Single变为for循环并存储索引以用更新的结构替换它?

解决方法

由于结构是值类型,并且因为值类型被复制,myCat最终会得到列表中cat的副本.您需要对结构本身进行操作,而不是对其进行操作.

此外,只有在结构的单个变量或数组的一部分时,才能直接修改结构的字段. List< T>的索引器返回一个副本,因此C#编译器产生“无法修改值类型”错误.

我知道的唯一解决方案(没有让Cat成为类或re-assigning a modified copy)使catList成为一个数组:

var indexOf = catArray
    .Select((Cat,Index) => new {Cat,Index})
    .Single(p => p.Cat.Id == 7).Index;
catArray[indexOf].Name = "Dr Fluffykins";

(编辑:李大同)

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

    推荐文章
      热点阅读