Добавление различных типов объектов в коллекцию ac # 4.0

У меня есть функция, которая возвращает объекты различных типов на основе параметра, переданного этой функции. Можно ли добавить эти различные типы объектов в коллекцию на основе некоторого идентификатора в C # 4.0? Обычно мы делаем что-то вроде этого Список или Список но я хочу одну коллекцию, которая может добавить объект любого типа.

7
задан SharpD 25 August 2010 в 08:10
поделиться

7 ответов

Вместо того, чтобы просто создавать List , как рекомендуют другие плакаты, вы можете определить интерфейс, например IListableObject , который содержит несколько методы, которые необходимо реализовать вашим объектам. Это значительно упростит написание любого кода, использующего эти объекты, и защитит от нежелательных объектов, попадающих в коллекцию в дальнейшем.

11
ответ дан 6 December 2019 в 06:13
поделиться

На самом деле ваша коллекция должна быть настолько конкретным, насколько вы можете это сделать. Когда вы говорите

объекты разных типов

Есть ли у этих объектов что-нибудь общее? Реализуют ли они общий интерфейс?
В таком случае вы можете специализировать список на этом интерфейсе List

В противном случае List будет делать то, что вы хотите.

Обновление

Нет, не совсем.

Извините, но я собираюсь подвергнуть сомнению ваш замысел.
Если у вас есть набор различных объектов, как вы решите, как использовать один из объектов?
У вас будет большой оператор switch, переключающий тип объекта, затем вы приводите его к определенному объекту и используете его.

У вас также есть аналогичный оператор switch в вашем фабричном методе, который создает объект.

Одно из преимуществ объектной ориентации состоит в том, что если вы правильно проектируете свои объекты, вам не нужно делать эти большие "Если это этот объект, сделайте это.Метод (), если это тот объект, сделайте это.OtherMethod ()" ".

Могу я спросить, почему вы помещаете разные объекты в одну и ту же коллекцию? Какая для вас польза?

3
ответ дан 6 December 2019 в 06:13
поделиться

Коллекции в более ранних версиях C# (не универсальные) могут содержать любые объекты. Если они имеют тип значения, они будут помещены в объект. Когда вам нужно их использовать, вы можете просто привести их к исходному типу.

Вы можете использовать List для хранения информации о типе, если хотите. И Type[], Hashtable и т.п. тоже подойдут. Вы можете использовать оператор typeof для получения типа или использовать Object.GetType().

1
ответ дан 6 December 2019 в 06:13
поделиться

Да, он называется объект. Например:

var objlist = new List<object>();
objlist.Add(1);
objlist.Add(true);
objlist.Add("hello");
8
ответ дан 6 December 2019 в 06:13
поделиться

Также ознакомьтесь с динамическим типом.

http://msdn.microsoft.com/en-us/library/dd264736.aspx

В основном это будет делать то же самое.

1
ответ дан 6 December 2019 в 06:13
поделиться

Если вам нужна коллекция, которая может добавлять объекты любого типа, то наиболее подходящим типом будет List.

1
ответ дан 6 December 2019 в 06:13
поделиться

Вы можете использовать object[], List, ArrayList, IEnumerable, ... но если эти типы имеют общий базовый тип, было бы лучше придерживаться строго типизированной коллекции.

4
ответ дан 6 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: