Comment renvoyer un littéral de tableau en C #

87

J'essaye le code suivant. La ligne avec l'erreur est indiquée.

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

Comment puis-je retourner un littéral de tableau comme des littéraux de chaîne?

sgarg
la source
4
Cela ne vaut rien non plus que C # n'ait pas réellement de littéraux de tableau, mais une syntaxe d'initialisation de tableau - à laquelle se réfère la réponse acceptée. Les littéraux sont spéciaux en ce qu'ils peuvent être directement sérialisés et peuvent être affectés à des constchamps. Ce n'est pas le cas avec la syntaxe d'initialisation de tableau.
cwharris

Réponses:

164

Renvoyez un tableau intcomme celui-ci:

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

Vous pouvez également taper implicitement le tableau - le compilateur en déduira qu'il devrait l'être int[]car il ne contient que des intvaleurs:

return new [] { 0, 0, 0 };
Blorgbeard est sorti
la source
6
Woah ho, je ne savais pas que vous pouviez taper implicitement des tableaux! +1
Chris Sinclair
1
J'ai trouvé que cela new int [] {0,0,0}fonctionne également. Ce serait plus clair à mon avis.
sgarg
3
@sgarg Cela semble être identique à la réponse. Et je ne suis pas d'accord, le typage implicite du tableau signifie que changer les constantes en virgule flottante obtiendrait automatiquement le type de tableau correct.
NetMage
12

Blorgbeard est correct, mais vous pourriez également penser à utiliser la nouvelle classe Tuple pour .NET 4.0. J'ai trouvé qu'il était plus facile de travailler avec un nombre défini d'articles à retourner. Comme si vous devez toujours renvoyer 3 éléments dans votre tableau, un tuple à 3 int indique clairement ce que c'est.

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

ou simplement

return Tuple.Create(0,0,0);
jb.
la source
2
Si vous avez un nombre variable d'articles mais que vous voulez des fonctionnalités supplémentaires, vous pouvez également faire:return new List<int>(new int[]{0,0,0});
Dave
1
@Dave ne serait pas List<int>(Enumerable.Repeat(0, 3))mieux?
NetMage
@NetMage Ce serait certainement mieux si vous vouliez faire varier le nombre d'éléments, certainement.
Dave
9

si le tableau a une taille fixe et que vous voulez en renvoyer un nouveau rempli de zéros

return new int[3];
anouar.bagari
la source