Come restituire un valore letterale di matrice in C #


89

Sto provando il seguente codice. Viene evidenziata la riga con l'errore.

int[] myfunction()
{
    {
      //regular code
    }
    catch (Exception ex)
    {                    
       return {0,0,0}; //gives error
    }
}

Come posso restituire un letterale array come i letterali stringa?


4
Inoltre, non vale nulla il fatto che C # non abbia effettivamente letterali di matrice, ma una sintassi di inizializzazione di matrice, a cui si riferisce la risposta accettata. I letterali sono speciali in quanto possono essere serializzati direttamente e possono essere assegnati ai constcampi. Questo non è il caso della sintassi di inizializzazione dell'array.
cwharris

Risposte:


167

Restituisce un array di intquesto tipo:

return new int [] { 0, 0, 0 };

Puoi anche digitare implicitamente l'array : il compilatore dedurrà che dovrebbe essere int[]perché contiene solo intvalori:

return new [] { 0, 0, 0 };

6
Woah ho, non sapevo che potessi scrivere in modo implicito gli array! +1
Chris Sinclair

1
Ho scoperto che new int [] {0,0,0}funziona anche. Sarebbe più chiaro secondo me.
sgarg

3
@sgarg Sembra essere identico alla risposta. E non sono d'accordo, la digitazione implicita dell'array significa che cambiare le costanti in virgola mobile otterrebbe automaticamente il tipo di array corretto.
NetMage

13

Blorgbeard è corretto, ma potresti anche pensare di usare la nuova classe Tuple per .NET 4.0. Ho scoperto che è più facile lavorare quando hai un determinato numero di articoli da restituire. Come se tu avessi sempre bisogno di restituire 3 elementi nel tuo array, una tupla di 3 int rende chiaro di cosa si tratta.

return new Tuple<int,int,int>(0,0,0);

o semplicemente

return Tuple.Create(0,0,0);

2
Se hai un numero variabile di articoli ma desideri alcune funzionalità extra puoi anche fare:return new List<int>(new int[]{0,0,0});
Dave

1
@ Dave non List<int>(Enumerable.Repeat(0, 3))sarebbe migliore?
NetMage

@NetMage Sarebbe meglio se volessi variare il numero di elementi, certamente.
Dave

10

se l'array ha una dimensione fissa e si desidera restituirne uno nuovo pieno di zeri

return new int[3];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.