如何在不创建新实例的情况下修改传入对象的属性?

时间:2015-07-14 14:34:38

标签: c# linq

我想修改传入对象的属性。如何在不创建新实例的情况下执行此操作?

我有一个班级

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;
}

2 个答案:

答案 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();
}