2010-07-05 5 views
1

Quelqu'un sait-il d'un plus court (espérons-le plus élégant) façon d'initialiser une collection de types anonymes en C# que ce qui suit:C# liste tuple anonyme

new[] { 
    new[] { "B", "Banana" }, 
    new[] { "C", "Carrot" }, 
    new[] { "D", "Durian" }, 
}.Select(x => new {Value = x[0], Text = x[1] }; 

Répondre

1

Vous pouvez utiliser un seul tableau, comme celui-ci :

Attention: Code abominable à venir!

object temp = null; 

new object[] { 
    "B", "Banana", 
    "C", "Carrot", 
    "D", "Durian" 
}.Select((v, i) => i % 2 == 0 ? (temp = v) : new { Value = temp, Text = v }) 
.Where((v, i) => i % 2 == 1) 
.ToArray() //Important! 

Ne fais pas ça, jamais!

+0

qui est sérieusement mauvais code! :) –

+0

Haha ok, ouais c'est pour se débarrasser de la répétition, et vous pourriez cacher les appels Linq dans une méthode d'extension personnalisée ... mais le code est toujours terrible comme vous le dites. – cbp

1

Vous aviez presque ..

var myCollection = new[] 
{ 
    new { Value = "B", Text = "Banana" }, 
    new { Value = "C", Text = "Carrot" }, 
    new { Value = "D", Text = "Durian" } 
}; 
+0

Ce n'est pas _shorter_. Cependant, c'est la meilleure façon de le faire. – SLaks

+0

Je pense que c'est une alternative équivalente (en termes de lisibilité), mais je suppose que j'essaie de me débarrasser de la répétition redondante dans le code. – cbp

+1

Oh, je vois .. Je suis allé pour plus élégant plus court, manquant la question un peu. Mais dépouiller les noms des champs me semble un peu inutile obsfucation ... imo répétition n'est souvent pas mauvais. – Mania