2010-07-05 56 views
1

有谁知道的(希望更优雅)的方式在C#初始化匿名类型的集合比下面C#匿名元组列表

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

回答

1

你可以使用一个单一的阵列,像这样:

警告:可恶的代码提前!

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! 

不要这样做,EVER!

+0

这是严重错误的代码! :) – 2010-07-05 02:16:06

+0

哈哈好吧,是的,这是摆脱了重复,你可以隐藏Linq调用自定义扩展方法...但代码仍然可怕,就像你说的。 – cbp 2010-07-05 02:17:36

1

你近了吧..

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

这不是_shorter_。但是,这是最好的方式。 – SLaks 2010-07-05 02:11:28

+0

我认为这是一个替代方案(在可读性方面),但我想我试图摆脱代码中的冗余重复。 – cbp 2010-07-05 02:15:47

+1

哦,我明白了......我越来越优雅,稍微缺少了这个问题。但是剥去田野的名字似乎对我来说有点不必要的赘述...... imo的重复往往并不坏。 – Mania 2010-07-05 02:19:55