【问题标题】:How to modify a property of an anynomus type array in C#? [duplicate]如何在 C# 中修改任意类型数组的属性? [复制]
【发布时间】:2020-12-10 20:15:44
【问题描述】:

我有以下代码

var result = data.Select(a => new { Id = a.Id, text = a.Type, assetName  = a.Value}).Take(10).OrderBy(a => a.text).ToList();

我想将 Type 和 Value 连接成一个值,并将这个值分配给这样的文本

foreacah(var item in result)
{
  item.text = item.text + " | " + item.assetName;
}

有没有办法做到这一点?

【问题讨论】:

  • 您将不得不使用反射,或者不使用匿名类型。 supposed 匿名类型是不可变的,尽管使用反射可以规避这一点。但是,在常规 C# 中,您不能。
  • 为什么不直接在.Select(a =>中进行连接

标签: c# anonymous-types


【解决方案1】:

匿名对象通常在一次创建和一次读取的上下文中使用。对它们执行任何逻辑都不符合这个概念。

但是,无论如何,当您迭代该集合时,您也可以只创建另一个在其中创建新对象的集合 - 这又是只读的。

var result = data.Select(a => new { Id = a.Id, text = a.Type, assetName  = a.Value}).Take(10).OrderBy(a => a.text).ToList();
var modified = result.Select(x => new { 
    Id = x.Id,
    text = x.text + "|"  x.assetName },
    assetName = x.AssetName 
});

【讨论】:

  • 我正在迭代集合以修改结果。
  • @AlexT 当然可以,但是如果您修改现有对象或只是克隆它们以赋予克隆其他属性,则没有真正的区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2019-07-11
  • 2012-12-05
相关资源
最近更新 更多