Domanda

IList<string> strList = new string[] { "Apple", "Mango", "Orange" };

IList<string> lst = new ReadOnlyCollection<string>(new[]{"Google",
"MSN","Yahoo"});

In entrambi i casi non posso usare il metodo "Add()" per aggiungere nuovi elementi. quindi quasi entrambi le dichiarazioni sono uguali?

È stato utile?

Soluzione

Con il primo, strList[2] = "Pear"; funzionerà ... non con il secondo. Le matrici sono sempre mutabili in quanto è possibile riassegnarle per indice, anche se non è possibile aggiungere / rimuovere. Una raccolta di sola lettura è proprio questa: sola lettura.

Altri suggerimenti

Gli elementi in strList possono essere modificati (non aggiunti o rimossi, ma modificati).

Nella prima dichiarazione, è ancora possibile utilizzare quanto segue:

strList[0] = "Not a fruit";

ReadOnlyCollection<T> avvolge qualsiasi IList<T> in un oggetto leggero. Passa tutte le chiamate che non modificano la raccolta sull'oggetto spostato (ottieni Count, ottieni Item[], GetEnumerator), ma genera un'eccezione per tutte le chiamate che cambiano la raccolta (Add, < =>, Remove, imposta Clear).

Le matrici non sono ridimensionabili, ma non sono di sola lettura. La distinzione è importante da comprendere o è possibile introdurre alcuni gravi problemi di sicurezza, ad esempio vedere Path.InvalidPathChars Field .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top