Cómo devolver un literal de matriz en C #

87

Estoy probando el siguiente código. Se señala la línea con el error.

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

¿Cómo puedo devolver un literal de matriz como literales de cadena?

sgarg
fuente
4
Tampoco vale la pena que C # en realidad no tenga literales de matriz, sino una sintaxis de inicialización de matriz, a la que se refiere la respuesta aceptada. Los literales son especiales porque se pueden serializar directamente y se pueden asignar a constcampos. Este no es el caso de la sintaxis de inicialización de matrices.
cwharris

Respuestas:

164

Devuelve una matriz intcomo esta:

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

También puede escribir implícitamente la matriz ; el compilador inferirá que debería ser int[]porque contiene solo intvalores:

return new [] { 0, 0, 0 };
Blorgbeard está fuera
fuente
6
Woah ho, ¡no sabía que podías escribir arrays implícitamente! +1
Chris Sinclair
1
Descubrí que new int [] {0,0,0}también funciona. Sería más claro en mi opinión.
sgarg
3
@sgarg Eso parece ser idéntico a la respuesta. Y no estoy de acuerdo, la escritura implícita de la matriz significa que cambiar las constantes a punto flotante obtendría automáticamente el tipo de matriz correcto.
NetMage
12

Blorgbeard es correcto, pero también podría pensar en usar la nueva clase Tuple de .NET 4.0. Descubrí que es más fácil trabajar cuando tienes una cantidad determinada de artículos para devolver. Como si siempre necesita devolver 3 elementos en su matriz, una tupla de 3 int deja en claro de qué se trata.

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

o simplemente

return Tuple.Create(0,0,0);
jb.
fuente
2
Si tiene un número variable de elementos pero desea alguna funcionalidad adicional, también puede hacer:return new List<int>(new int[]{0,0,0});
Dave
1
@Dave no List<int>(Enumerable.Repeat(0, 3))sería mejor?
NetMage
@NetMage Sería mejor si quisiera variar la cantidad de elementos, ciertamente.
Dave
9

si la matriz tiene un tamaño fijo y desea devolver una nueva llena de ceros

return new int[3];
anouar.bagari
fuente