我想修改传入对象的属性。如何在不创建新实例的情况下执行此操作?
我有一个班级
public class Report : IReport<ReportItem>
{
public Report()
{
Items = new ReportItemsCollection();
}
public Report(IEnumerable<ReportItem> items)
{
Items = new ReportItemsCollection(items);
}
[DataMember(Name = "items")]
public ReportItemsCollection Items { get; private set; }
IEnumerable<ReportItem> IReport<ReportItem>.Items
{
get { return Items; }
}
}
和两种方法
private static Report ConvertReportItems(Report report)
{
var reportData = report.Items.Select(BackwardCompatibilityConverter.FromOld);
return new Report(reportData);
}
public static ReportItem FromOld(ReportItem reportItem)
{
reportItem.AgentIds = new List<Guid> { reportItem.AgentId };
reportItem.AgentNames = new List<string> { reportItem.Agent };
return reportItem;
}
答案 0 :(得分:3)
听起来您正在尝试使用Linq更新集合中每个对象的属性。 Linq用于查询,而不是更新。如果您想更新集合中的项目,则必须循环:
foreach(ReportItem item in report.Items)
{
// update item
}
你是否这样做是另一个问题,但机械上就是 的方式。
答案 1 :(得分:1)
确保Report
允许您设置其属性。我假设你有一个Data
属性或类似的东西,它有一个二传手。
private static void ConvertReportItems(Report report)
{
report.Data = report.Items.Select(BackwardCompatibilityConverter.FromOld)
.ToList();
}