Stavo passando attraverso il codice sorgente per Array.cs
quando ho letto che Array.Copy()
non fornisce una garanzia che una copia avrebbe avuto esito positivo e, anzi, potrebbe anche corrompere l'istanza originale (correggimi se io ho sbagliato qui). Per garantire la tranquillità, lo ConstrainedCopy()
sembra raggiungere lo stesso risultato.Array.Copy e Array.ConstrainedCopy - C#
La mia domanda è:
1> Perché qualcuno dovrebbe utilizzare Array.Copy()
se non sembra per garantire un corretto trasferimento dei dati e andando a male, eventualmente, l'istanza originale? Infatti, tutte le classi di raccolta sembrano utilizzare Array.Copy()
per aumentare le dimensioni dell'istanza. Perché non utilizzare ConstrainedCopy()
qui
2> Quanto sarebbe il costo dell'uso di ConstrainedCopy()
in ogni momento? Presumo che ci sarebbe più logica aggiunta a ConstrainedCopy()
?
Puoi spiegare quali sono le circostanze estreme che possono causare eccezioni? Altrimenti non sapremo se il nostro scenario è quello in cui dobbiamo preoccuparci. – Gabe
Touche, qualcosa come un'espettazione della memoria insufficiente può causare un errore della copia, la maggior parte di queste circostanze sono al di fuori dell'ambito del metodo di copia e di solito sono un segno di un problema più grande. – BentOnCoding
La maggior parte delle eccezioni che possono essere generate dal metodo 'Copia' avvengono prima che inizi la copia, quindi non è necessario' ConstrainedCopy' per salvarti da un indice fuori intervallo o dalla mancata corrispondenza ype. Le uniche possibili eccezioni a cui posso pensare che possano accadere a metà copia sono 'InvalidCastException' e' ThreadAbortException'. – Gabe