Неужели .net typecast, когда объект используется в коллекции с использованием Generics?

StackOverflow https://stackoverflow.com/questions/1914121

Вопрос

Неужели .NET CLR Типирует объекты для тех, которые упоминаются в объявлении сбора? Если я объявлю

List<string> lststrs= new List<string>();
lststrs.add("ssdfsf");

.NET TypeCast этот объект при добавлении и поиске ?????

Ну, я думаю, что сам вопрос не был четко понят всеми. Дайте мне подробно рассмотреть. В Java есть дженерики, но если вы декомпиляете код, вы заметите, что компилятор помещает TypeCast везде, где используется объект сбора. Для Ex: List ListOfStrings; listofstrings.add (""); String value = listofstrings.get (1); После разложения файла класса мы видим этот список списков; listofstrings.add (""); String value = (string) listofstrings.get (1); Здесь компилятор поддержал TypeCast для строки.

Теперь мой вопрос в том, является ли это же в .NET?

Это было полезно?

Решение

Вы имеете в виду это?

List<string> myList = new List<string>();

Список - это общий тип - если вы объявите, как ниже, вы получите ошибку комбинации:

List myList = new List(); //<-- big mama of a compilation error

В любом случае - поскольку это общий список, он сильно напечатан, поэтому вы не сможете передать что -либо, что не является строкой (если вы это сделаете большая мамочка ошибки компиляции).

Другие советы

Нет, ваш список твердо набрана на струны здесь. Это все преимущество использования дженериков.

Это не тип. Нет.

Generics Force Type Saftey, позволяя добавлять объекты указанного типа в общую коллекцию. Это предупреждения компилятора.

В примере, если бы вы попытались добавить другой объект, например, целое число, то вы получите предупреждение компилятора.

Там нет такой вещи, как «список» :)

Однако есть List<string>. Анкет Здесь он не разыграет вашу струну, так как это коллекция струн.

Считайте это, хотя:

List<object> objects = new List<object>();
objects.Add("Hello SO.com");
string myString = objects.First(); //Wont compile, as objects return an object.
//You need to cast it to a string (for example, by using the as operator).

Нет. Это не нужно, так как коллекция печатается.

Никакого типа не требуется вообще. Факт использования Generics делает ваш список сильно напечатать автоматически.

Нет, это не так. В отличие от Java, Die CLR реализует дженерики как различные типы самостоятельно, а не с помощью стирания типа. Итак, а List<string> другой тип от List<int>, и оба типа динамически разбираются во время выполнения, когда это необходимо.

НЕТ.

См. Реализацию List.add:

private T[] _items;

public void Add(T item)
{
    if (this._size == this._items.Length)
    {
        this.EnsureCapacity(this._size + 1);
    }
    this._items[this._size++] = item;
    this._version++;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top