У меня есть функция, которая возвращает объекты различных типов на основе параметра, переданного этой функции. Можно ли добавить эти различные типы объектов в коллекцию на основе некоторого идентификатора в C # 4.0? Обычно мы делаем что-то вроде этого Список или Список но я хочу одну коллекцию, которая может добавить объект любого типа.
Вместо того, чтобы просто создавать List
, как рекомендуют другие плакаты, вы можете определить интерфейс, например IListableObject
, который содержит несколько методы, которые необходимо реализовать вашим объектам. Это значительно упростит написание любого кода, использующего эти объекты, и защитит от нежелательных объектов, попадающих в коллекцию в дальнейшем.
На самом деле ваша коллекция должна быть настолько конкретным, насколько вы можете это сделать. Когда вы говорите
объекты разных типов
Есть ли у этих объектов что-нибудь общее? Реализуют ли они общий интерфейс?
В таком случае вы можете специализировать список на этом интерфейсе List
В противном случае List
будет делать то, что вы хотите.
Обновление
Нет, не совсем.
Извините, но я собираюсь подвергнуть сомнению ваш замысел.
Если у вас есть набор различных объектов, как вы решите, как использовать один из объектов?
У вас будет большой оператор switch, переключающий тип объекта, затем вы приводите его к определенному объекту и используете его.
У вас также есть аналогичный оператор switch в вашем фабричном методе, который создает объект.
Одно из преимуществ объектной ориентации состоит в том, что если вы правильно проектируете свои объекты, вам не нужно делать эти большие "Если это этот объект, сделайте это.Метод (), если это тот объект, сделайте это.OtherMethod ()" ".
Могу я спросить, почему вы помещаете разные объекты в одну и ту же коллекцию? Какая для вас польза?
Коллекции в более ранних версиях C# (не универсальные) могут содержать любые объекты. Если они имеют тип значения, они будут помещены в объект. Когда вам нужно их использовать, вы можете просто привести их к исходному типу.
Вы можете использовать List
для хранения информации о типе, если хотите. И Type[], Hashtable и т.п. тоже подойдут. Вы можете использовать оператор typeof для получения типа или использовать Object.GetType().
Да, он называется объект
. Например:
var objlist = new List<object>();
objlist.Add(1);
objlist.Add(true);
objlist.Add("hello");
Также ознакомьтесь с динамическим типом.
http://msdn.microsoft.com/en-us/library/dd264736.aspx
В основном это будет делать то же самое.
Если вам нужна коллекция, которая может добавлять объекты любого типа, то наиболее подходящим типом будет List
.
Вы можете использовать object[]
, List
, ArrayList, IEnumerable, ... но если эти типы имеют общий базовый тип, было бы лучше придерживаться строго типизированной коллекции.