Domanda

.NET CLR Typecast gli oggetti a quelli menzionati nella dichiarazione di raccolta? Se dichiaro un

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

.NET tipà questo oggetto aggiungendo e recupera ?????

Beh, penso che la domanda stessa non sia stata chiaramente compresa da tutti. Lasciami elaborato. In Java ci sono generici, ma se si decompila il codice noterai che il compilatore posiziona un tipo di tipografi ovunque viene utilizzato l'oggetto di raccolta. Per Ex: List ListOfstrings; ListOfStrings.add (""); String Value = listOfStrings.get (1); Dopo aver decompilato il file di classe vediamo questo elenco elencofstrings; ListOfStrings.add (""); String Value = (String) ListOfStrings.get (1); Qui il compilatore ha impaltato il tipografi per la stringa.

Ora la mia domanda è se è la stessa in .net ??

È stato utile?

Soluzione

Intendi questo?

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

L'elenco è un tipo generico: se dichiari di seguito otterrai un errore di compianto:

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

Comunque - dato che è un elenco generico è fortemente digitato, quindi non sarai in grado di trasmettere nulla che non sia una stringa (se lo fai, ne deriverà - in un grande mamma di un errore di compilazione).

Altri suggerimenti

No, la tua lista è fortemente digitata alle stringhe qui. Questo è l'intero vantaggio di usare i generici.

Non tipografi no.

Il tipo di forza generica saftey consentendo solo gli oggetti del tipo specificato di essere aggiunti nella raccolta generica. Questi sono avvertimenti del compilatore.

Nel tuo esempio, se dovessi tentare di aggiungere un altro oggetto, come un numero intero, otterresti un avvertimento del compilatore.

Non esiste una "lista" :)

Tuttavia, c'è un List<string>. Qui non lancerà la tua stringa, in quanto è una raccolta di stringhe.

Considera questo, però:

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).

No. Non è necessario, poiché la raccolta è digitata.

Non è necessaria alcuna tipografia. Il fatto di utilizzare i generici rende la tua lista per essere fortemente digitata automaticamente.

No no. A differenza di Java, Die Clr implementa i generici come tipi diversi da soli e non attraverso la cancellazione del tipo. Quindi, a List<string> è un tipo diverso da List<int>, ed entrambi i tipi sono contrastati in modo dinamico in fase di esecuzione quando necessario.

NO.

Vedi l'implementazione di 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++;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top