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

что серьезно плохой код! :) –

+0

Ха-ха, да, это избавляет от повторения, и вы можете скрыть вызовы Linq в пользовательском методе расширения ... но код по-прежнему страшен, как вы говорите. – cbp

1

Вы чуть было его ..

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

Это не _shorter_. Однако это лучший способ сделать это. – SLaks

+0

Я думаю, что это альтернативная альтернатива (с точки зрения удобочитаемости), но я думаю, что я пытаюсь избавиться от избыточного повторения кода. – cbp

+1

О, я вижу. Я пошел на более элегантный, более короткий, не дав вопроса немного. Но вычеркивание имен полей кажется немного ненужным для меня обманом ... Имо повторение часто не плохо. – Mania

Смежные вопросы