«Я пытался создать экземпляр коллекции напрямую, а не списка, и, похоже, это не сработало».
Какую ошибку вы получаете? Вы можете определенно создать экземпляр Collection<T>
напрямую, это не абстрактный класс, и у него есть несколько открытых конструкторов, в том числе один без параметров. Вы можете сделать это, например:
var values = new System.Collections.ObjectModel.Collection<int> { 1,2,3,4 };
Я заметил, что ваш пример кода имеет GenericTickType
и TickType
. Это ошибка или у вас два занятия? Вы сказали, что это перечисление (которое?), Поэтому одно не может быть производным от другого. Если это два перечислимых типа, Collection<GenericTickType>
и Collection<TickType>
- это два разных класса, и один не может быть назначен другому.
Теперь, если TickType
- это с возможностью преобразования в GenericTickType
(и, вероятно, если они оба являются перечислениями и предполагают, что они имеют одинаковые числовые значения), вы все равно не можете привести Collection<TickType>
Collection<GenericTickType>
. Для большинства классов пока нет контра / ко-дисперсии (в C # 4). Но вы можете разыграть каждый TickType
, выполнив что-то вроде этого:
List<GenericTickType> list = new List<GenericTickType> { (GenericTickType)TickType.Price };
list.Add((GenericTickType)TickType.Price); // add more...
Collection<GenericTickType>genericTicks = new Collection<GenericTickType>(list);
Если у вас уже есть List<TickType>
и у вас есть доступ к C # 3.0 и LINQ, вы можете сделать это:
List<TickType> ticks = new List<TickType> { TickType.Price };
list.Add(TickType.Price); // add more...
List<GenericTickType> castedList = ticks.Cast<GenericTickType>().ToList();
Collection<GenericTickType>genericTicks = new Collection<GenericTickType>(castedList);
При этом используются методы расширения LINQ Cast<T>()
и ToList<T>()
для приведения каждого TickType
в исходном списке к GenericTickType
и создания нового List<GenericTickType>
, который используется для создания экземпляра Collecion<GenericTickType>
. (Я избегал использования var
, чтобы вы могли видеть типы на каждом шаге).