2010-07-05 55 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