Como retornar um literal de array em C #


87

Estou tentando o seguinte código. A linha com o erro é apontada.

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

Como posso retornar um literal de array como literais de string?


4
Também não vale a pena que o C # não tenha literais de array, mas uma sintaxe de inicialização de array - à qual se refere a resposta aceita. Literais são especiais porque podem ser serializados diretamente e podem ser atribuídos a constcampos. Este não é o caso da sintaxe de inicialização do array.
cwharris

Respostas:


164

Retorne uma matriz intcomo esta:

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

Você também pode digitar implicitamente a matriz - o compilador inferirá que deveria ser int[]porque ela contém apenas intvalores:

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

6
Woah ho, eu não sabia que você podia digitar arrays implicitamente! +1
Chris Sinclair

1
Descobri que new int [] {0,0,0}também funciona. Seria mais claro na minha opinião.
sgarg

3
@sgarg Isso parece ser idêntico à resposta. E eu discordo, a digitação implícita da matriz significa que alterar as constantes para ponto flutuante obteria automaticamente o tipo de matriz correto.
NetMage

12

Blorgbeard está correto, mas você também pode pensar em usar a nova classe Tupla do .NET 4.0. Descobri que é mais fácil trabalhar quando você tem um número definido de itens para devolver. Como se você sempre precisasse retornar 3 itens em seu array, uma tupla 3-int deixa claro o que é.

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

ou simplesmente

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

2
Se você tem um número variável de itens, mas deseja alguma funcionalidade extra, você também pode fazer:return new List<int>(new int[]{0,0,0});
Dave

1
@Dave não List<int>(Enumerable.Repeat(0, 3))seria melhor?
NetMage

@NetMage Seria melhor se você quisesse variar o número de itens, certamente.
Dave de

9

se o array tem um tamanho fixo e você deseja retornar um novo preenchido com zeros

return new int[3];
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.