Подтвердить что ты не робот

Что такое общие коллекции в С#?

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

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

4b9b3361

Ответ 1

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

Если у меня есть класс Employee, и мне нужна коллекция сотрудников, я могу сказать:

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 - это его собственная тема, достойная (по крайней мере) одной главы книги. На очень высоком уровне программирование с помощью дженериков предоставляет другой способ повторного использования кода - независимо от любой иерархии классов или деталей реализации конкретного класса.

Подробнее здесь.

Ответ 2

Вам нужно подставить 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!

Ответ 3

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

List<Foo> fooList;

В имени типа это местозаполнитель для "реального" типа объекта, который вы вставляете в общий список в момент его создания.

Ответ 8

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

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

Ответ 9

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