Domanda C # per principianti su Array.Reverse

2

Mi trovo in una serie di tutorial video molto dettagliata e completa, che utilizza Visual Studio 2012 come ambiente di sviluppo.

Ad ogni modo, una cosa difficile da capire è questa. Dì che hai questo codice

static void Main()
{
    int[] myArray = {0, 1, 2, 3};   
    Array.Reverse(myArray);   
    foreach (int item in myArray) Console.WriteLine(item);   
    Console.ReadLine();   
//console says 3,2,1,0
}

static void Main()
{     
    int[] myArray = {0, 1, 2, 3};   
    myArray.Reverse();   
    foreach (int item in myArray) Console.WriteLine(item);   
    Console.ReadLine();   
//console says 0, 1, 2, 3  
}

Non capisco perché usare il metodo della classe base modifichi in modo permanente l'ordine degli elementi nella matrice da quel punto in poi, invece di usare l'istanza della classe Array (myArray) che la modifica solo per la linea corrente, quindi ritorna all'ordine inverso. Qualcuno può spiegarlo?

    
posta Chris Koro 20.06.2015 - 10:57
fonte

1 risposta

9

Nel primo programma, hai chiamato Array.Reverse , un metodo statico della classe Array che inverte l'array sul posto.

Nel tuo secondo programma hai chiamato Enumerable.Reverse , un metodo di estensione che funziona su qualsiasi tipo di enumerabile. Essendo un array è un tipo di enumerabile, funziona sugli array. Ma non esegue il reverse sul posto, ma restituisce un nuovo enumerabile che è il contrario di quello che hai passato .

Avresti potuto fare questo:

static void Main()
{     
    int[] myArray = {0, 1, 2, 3};   
    var somethingThatCanBeUsedByforEachAndReturnsYourArrayReversed = myArray.Reverse();   
    foreach (int item in somethingThatCanBeUsedByforEachAndReturnsYourArrayReversed)
    {
       Console.WriteLine(item);   
    }
    Console.ReadLine();   
//console says 0, 1, 2, 3  
}

Ma per essere onesti, se stai ancora imparando, lascia le tue mani fuori da Enumerables e LinQ. Sono grandi , ma in questo momento, molto sopra la tua testa. Cancellare semplicemente using System.Linq dal file sorgente renderà la tua vita molto più semplice mentre stai ancora imparando.

    
risposta data 20.06.2015 - 11:07
fonte

Leggi altre domande sui tag