2011-08-23 10 views
15

¿Cuál es la forma más sencilla/más corta en que puedo escribir un inicializador de colecciones en línea?¿Inicializador de colección en línea más corto? C#

No me importan los nombres de referencia, los índices están bien y el ítem solo necesita ser usado en el alcance del método.

Creo que una colección de tipo anónimo sería más complicada porque tendría que seguir escribiendo el nombre de la clave todo el tiempo.

he actualmente tiene

var foo = new Tuple<int, string, bool>[] 
{ 
    new Tuple<int, string, bool>(1, "x", true), 
    new Tuple<int, string, bool>(2, "y", false) 
}; 

Im la esperanza de C# 4.0 tendrá algo que he perdido.

+1

¿quieres el más corto o el más limpio? – Jodrell

+0

Si se usa mucho, puede escribir su propia clase que tenga un método 'Add (int, string, bool)' y luego usar el inicializador de colección, como 'var foo = new MyCollection {{1," x ", true}, {2, "y", false}}; ' – nawfal

Respuesta

17

Lo más corto c un get es utilizar Tuple.Create en lugar de new Tuple:

var foo = new [] { Tuple.Create(1, "x", true), Tuple.Create(2, "y", false) }; 
5

un poco menos espacio en el que hay si se utiliza Tuple.Create(1,"x",true) en lugar de lo nuevo - y se puede pelar el material new Tuple<tint, string, bool> antes de la matriz también:

var foo = new [] { Tuple.Create(1, "x", true), Tuple.Create(2, "y", false) }; 

o tomar éste:

Func<int, string, bool, Tuple<int, string, bool>> T = (i, s, b) => Tuple.Create(i,s,b); 
var foo = new [] { T(1, "x", true), T(2, "y", false) }; 

o incluso

Func<int, string, Tuple<int, string, bool>> T = (i, s) => Tuple.Create(i,s,true); 
Func<int, string, Tuple<int, string, bool>> F = (i, s) => Tuple.Create(i,s,false); 
var foo = new [] { T(1, "x"), F(2, "y") }; 
+1

btw markdown proporciona una forma mucho más sencilla de formatear código * bloques * que lo que estaba haciendo: ¡simplemente sangría cada línea (sin guardar) cuatro espacios! por ejemplo, ver mi edición – AakashM

+0

oh - gracias - probé el "botón", pero esto se detendrá en cada línea vacía ... Supongo que esto podría hacerme más rápido en el futuro;) – Carsten

+1

@CKoenig: Seleccione todo el código que desea formatear y luego presione el botón. Esto funciona. –

0

También puede añadir un

using MyTuple= System.Tuple<int, string, bool>; 

al final de sus declaraciones using y luego usar MyTuple en lugar de la versión más larga.

Cuestiones relacionadas