Мне нужно добавить к собственности ICollection<string>
класса, в котором у меня есть IEnumerable
. Вот полная программа, которая иллюстрирует проблему:Как добавить свойство ICollection при итерации типа объекта?
using System;
using System.Collections.Generic;
using System.Linq;
namespace CollectionAddingTest
{
public class OppDocumentServiceResult
{
public OppDocumentServiceResult()
{
this.Reasons = new List<string>();
}
public Document Document { get; set; }
public bool CanBeCompleted
{
get
{
return !Reasons.Any();
}
}
public ICollection<string> Reasons { get; private set; }
}
public class Document
{
public virtual string Name { get; set; }
}
public class Program
{
private static void Main(string[] args)
{
var docnames = new List<string>(new[] {"test", "test2"});
var oppDocResult = docnames
.Select(docName
=> new OppDocumentServiceResult
{
Document = new Document { Name = docName }
});
foreach (var result in oppDocResult)
{
result.Document.Name = "works?";
result.Reasons.Add("does not stick");
result.Reasons.Add("still does not stick");
}
foreach (var result in oppDocResult)
{
// doesn't write "works?"
Console.WriteLine(result.Document.Name);
foreach (var reason in result.Reasons)
{
// doesn't even get here
Console.WriteLine("\t{0}", reason);
}
}
}
}
}
Я бы ожидать, что каждый OppDocumentServiceResult бы его ссылки Document.Name
набор свойств для работ?, и каждый OppDocumentServiceResult должен иметь две причины. Однако ни то, ни другое не происходит.
Что такое свойство «Причины», которое я не могу добавить к нему?
Он должен работать абсолютно нормально. Пожалуйста, предоставьте краткую, но * полную * программу, демонстрирующую проблему. –
@JonSkeet изменил приведенное выше, чтобы быть немного более полным. Ясно, как грязь? –
Не совсем - это еще не краткая, но полная программа, которую мы можем использовать, чтобы точно выработать то, что происходит ... –