Что такое общие коллекции в C #? [Дубликат]

Я пытаюсь создать свой первый общий список и столкнулся с некоторыми проблемами. Я понимаю, что декларация выглядит как " List<T>", и я using System.Collections.Generic;вверху моей страницы. Однако Visual Studio не распознает Tпеременную.

Что мне не хватает?

11.12.2008 23:02:57
Не расстраивайтесь, я прошел через то же самое, когда начал изучать .NET 2.0. Я продолжал задаваться вопросом: «Что, черт возьми, означает T, и почему Visual Studio не знает, что я пытаюсь сделать?»
George Stocker 11.12.2008 23:22:04
Поэтому, если я хочу, чтобы в моем списке были разные типы объектов, мне нужно использовать интерфейс, например List <Ianimal>, поэтому, например, хранить catObj и dogObj?
Agile Noob 11.12.2008 23:23:30
[Эта статья] [1] на MSDN должна вам очень помочь. [1]: msdn.microsoft.com/en-us/library/512aeb7t.aspx
Perpetualcoder 11.12.2008 23:25:27
Да, List <IAnimal> был бы хорошим примером того, как можно использовать дженерики.
Kon 12.12.2008 17:00:23
8 ОТВЕТОВ
РЕШЕНИЕ

List<T>значит List<WhateverTypeYouWantItToBeAListOf>. Так, например:

Если у меня есть класс сотрудников, и я хотел бы получить коллекцию сотрудников, я мог бы сказать:

List<Employee> employeeList = new List<Employee>();

Затем я мог бы добавить EmployeeОбъекты в этот список и сделать его безопасным для типов и распространить его на любое количество объектов сотрудников, которые я в него помещаю.

Вот так:

Employee emp1 = new Employee();
Employee emp2 = new Employee();

employeeList.Add(emp1);
employeeList.Add(emp2);

employeeListтеперь держит emp1и emp2как объекты.

Существует несколько аспектов универсальных коллекций, наиболее важными из которых являются то, что они предоставляют объектно-независимый способ иметь ... ну ... коллекцию объектов. Они безопасны от типов; Это означает, что любая коллекция будет состоять из одного типа объекта. У вас не будет Animalэкземпляра внутри List<Employee>(если, конечно, Employee не является базовым классом, который Animalнаследуется от. Однако в этот момент у вас возникают большие проблемы.

Программирование с помощью Generics - это отдельная тема, достойная (по крайней мере) одной главы в книге. На очень высоком уровне программирование с использованием дженериков предоставляет еще один способ повторного использования кода - независимо от какой-либо иерархии классов или деталей реализации конкретного класса.

Больше информации здесь .

46
18.11.2014 13:03:25

Вы пытаетесь использовать класс List или вы пытаетесь создать свой собственный? Как выглядит ваш код в данный момент?

2
11.12.2008 23:04:16

Например, если вам нужен общий список целых чисел ( int), вы должны написать:

List<int> list = new List<int>();

T это параметр типа, который в вашем коде должен быть фактическим типом.

7
12.08.2009 18:22:08

Вам нужно заменить Tна другой тип , такие как int, stringили класс вашего творения:

List<int> values = new List<int>();

values.Add(1);
values.Add(2);

int secondNumber = values[1]; // Yay! No casting or boxing required!
10
12.08.2009 18:21:28

Вы объявляете список объектов Foo следующим образом:

List<Foo> fooList;

Имя типа in является заполнителем для «реального» типа объекта, который вы помещаете в общий список во время его создания.

4
11.12.2008 23:07:03

Рассматривать Tкак имя переменной. Вы должны указать его значение, т.е. сделать общий класс «конкретным». Таким образом, вы можете создать List<string>, List<int>или Listчего - либо еще вы хотите.

5
12.11.2012 15:09:59

Когда вы сделаете List<Object>, убедитесь, что ваш класс Object общедоступен. В установках VS по умолчанию классы выходят из коробки как «внутренние» - это означает, что вы не можете составить их список, потому что они менее доступны, чем публичный Список, который вы объявляете.

Это заставило меня ... вчера. Глупые значения по умолчанию.

4
12.12.2008 17:04:07

Что делает «универсальный список» универсальным, так это тот факт, что вы можете использовать один и тот же класс для создания списка яблок и списка картофеля. Конечно, после того, как вы создадите список с newоператором, вы должны решить, какие объекты вы хотите сохранить, и сообщить свое решение, указав имя типа объектов, которые вы храните в <>.

Следующая строка на самом деле говорит компилятору:

List<Employee> employeeList = new List<Employee>();

«Эй, мне нужен список, который может обрабатывать объекты типа Employee; и называется employeeList

Объект списка, который вы получаете таким образом, больше не является универсальным. Он будет принимать и возвращать только объекты типа Employee. Но поведение списка определяется «общим» способом, который не заботится о том, с какими объектами он фактически работает. Он просто вызывает их Tвнутренне, потому что для всего, что должен делать список, его тип содержимого на самом деле не имеет значения.

6
20.03.2013 22:49:23