2015-07-14 3 views
1

Я хотел бы изменить свойства входящего объекта. Как это сделать без создания нового экземпляра?Как изменить свойства входящего объекта без создания нового экземпляра?

У меня есть класс

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

Вам нужно объяснить больше об этом. –

+0

Я немного неясен, но что-то вроде 'reportData.Items = report.Items.Select (BackwardCompatibilityConverter.FromOld);' изменит существующий элемент без создания нового. Не уверен, что это действительно действительно, конечно, не зная вашу структуру объекта, но вы получаете суть. – Chris

+0

Зачем создавать новый экземпляр, если вы хотите изменить свойство? Что такое «Отчет»? Вам нужно больше объяснить вашу проблему. –

ответ

3

Похоже, вы пытаетесь обновить свойства каждого объекта в коллекции с помощью Linq. Linq для запросы, а не обновление. Если вы хотите обновления элементов в коллекции, вы должны цикл:

foreach(ReportItem item in report.Items) 
{ 
    // update item 
} 

ли вы должны делать это или нет, это другой вопрос, но механически это, как вы бы это сделать ,

1

Убедитесь, что Report позволяет установить его свойства. Я предполагаю, что у вас есть свойство Data или что-то в этом роде, у которого есть сеттер.

private static void ConvertReportItems(Report report) 
{ 
    report.Data = report.Items.Select(BackwardCompatibilityConverter.FromOld) 
     .ToList(); 
}