В моих интерфейсах обычно есть IList<ISomeType>
для представления членов типа списка и сказать, что я ожидаю реализацию, поддерживающую метод Add
.IList in interface, Список в реализации
Но в реализации интерфейса, есть
IList<ISomeType> = new List<ISomeType>()
и каждый раз, когда я использую список, я должен бросить, например
(this.MyList as List<IMyType>).AddRange(someType.ToList());
Есть ли лучший способ сделать это? Как избежать этого приведения?
- редактировать, чтобы запросить дополнительную информацию -
Вместо метода расширения, есть небольшое выражение LINQ, чтобы решить, что?
IList<string> list = new List<string>();
var items = new[] { "1", "2", "3" };
items.ToList().ForEach(x => list.Add(x));
Но это не похоже на то, чтобы быть очень прямым, поскольку оно инвертирует то, что делается. (действие находится над элементами, которые нужно добавить, а не в списке).
Что-нибудь лучше этого? Возможно что-то, что можно сделать в списке?
Метод расширения определенно является опцией. Но это не решает основной проблемы. Должен ли я действительно использовать Список вместо этого, когда я хочу сказать: «должен быть метод Add»? –
IList имеет метод Add - он просто не имеет метода AddRange - если вы хотите быть явным, вы можете создать свой собственный интерфейс, который наследует от IList и имеет метод, который вы хотите, но тогда вы бы должен создать свой собственный класс-оболочку - не похоже на это - с вашего вопроса кажется, что вы хотите использовать метод AddRange для своего собственного кода, а не для библиотеки, следовательно, предложение для метода расширения. –