Differenza tra stringa ReadOnlyCollection [] nel contesto della raccolta
-
06-07-2019 - |
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?
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 .