Я пытаюсь настроить класс так, чтобы его можно было инициализировать с помощью инициализатора объекта, но он содержит некоторые коллекции.В идеале я хотел бы, чтобы клиентский код мог выполнять:
MyClass myObj = new MyClass
{
Name = "Name",
Contents = new[]
{
"Item1",
"Item2"
}
}
Однако, где Contents
должно быть BindingList<string>
.В базовом поле хранится ссылка только для чтения на этот список, и я бы хотел, чтобы установщик по существу сделал Clear
, а затем AddRange
для установки содержимого.
Я не могу сделать Contents
Свойство IEnumerable<string>
, потому что клиентский код не будет видеть метод Add
, среди многих других, по крайней мере, без его приведения.Я не могу сделать это BindingList<string>
, потому что, если я его установлю, мне нужно создать новый список привязок для передачи ему ... это может быть возможно, но я бы не стал вводить неэффективность создания нового BindingList<string>
исключительно для того, чтобы передать его установщику свойств.
Идеальная вещь, которую можно сделать, - это получить геттер, возвращающий BindingList<string>
, и установщик принимает IEnumerable<string>
, но C # не делаетразрешить геттерам / сеттерам свойства иметь разные типы.
О, и неявное приведение между BindingList<string>
и IEnumerable<string>
- нет-нет, поэтому я тоже не могу этого сделать (http://blogs.msdn.com/b/peterhal/archive/2005/06/20/430929.aspx).
Есть ли способ обойти это?