Jak zwrócić literał tablicowy w języku C #


87

Próbuję następujący kod. Wskazuje się linię z błędem.

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

Jak mogę zwrócić literał tablicowy, taki jak literały łańcuchowe?


4
Nie jest też nic warte, że C # w rzeczywistości nie ma literałów tablicowych, ale składnię inicjującą tablicę - do której odnosi się zaakceptowana odpowiedź. Literały są wyjątkowe, ponieważ można je bezpośrednio serializować i przypisywać do constpól. Tak nie jest w przypadku składni inicjalizacji tablicy.
cwharris

Odpowiedzi:


164

Zwróć tablicę intpodobną do tej:

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

Możesz również niejawnie wpisać tablicę - kompilator wywnioskuje, że tak powinno być, int[]ponieważ zawiera tylko intwartości:

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

6
Woah ho, nie wiedziałem, że możesz niejawnie wpisywać tablice! +1
Chris Sinclair

1
Odkryłem, że to new int [] {0,0,0}też działa. Moim zdaniem byłoby jaśniej.
sgarg

3
@sgarg To wydaje się być identyczne z odpowiedzią. I nie zgadzam się, niejawne wpisywanie tablicy oznacza, że ​​zmiana stałych na zmiennoprzecinkowe automatycznie daje prawidłowy typ tablicy.
NetMage,

12

Blorgbeard ma rację, ale możesz również pomyśleć o użyciu nowej klasy krotki .NET 4.0. Zauważyłem, że łatwiej jest pracować, gdy masz określoną liczbę elementów do zwrotu. Tak jak w przypadku, gdy zawsze musisz zwrócić 3 elementy w swojej tablicy, krotka 3-int wyjaśnia, co to jest.

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

lub po prostu

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

2
Jeśli masz zmienną liczbę przedmiotów, ale chcesz mieć dodatkową funkcjonalność, możesz również:return new List<int>(new int[]{0,0,0});
Dave

1
@Dave nie List<int>(Enumerable.Repeat(0, 3))byłby lepszy?
NetMage,

@NetMage Z pewnością byłoby lepiej, gdybyś chciał zmieniać liczbę elementów.
Dave,

9

jeśli tablica ma stały rozmiar i chcesz zwrócić nową, wypełnioną zerami

return new int[3];
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.