2009-12-01 3 views
2

Из двух перечислений, что способ применить LINQ, чтобы получить парC# -Получением Возможных паров из двух перечислений

как

{красного, автомобиль}, {красного, велосипед}, {Зеленый, автомобили }, {Зеленый, велосипед}, ...

public enum Color 
{ 
    Red,Green,Blue 
} 

public enum Vehicle 
{ 
    Car,Bike 
} 

могу ли я использовать что-то вроде

var query = from c in Enum.GetValues(typeof(Color)).AsQueryable() 
      from c in Enum.GetValues(typeof(Vehicle)).AsQueryable()  
      select new {..What to fill here?.. } 

ответ

9

не используйте c в качестве переменной TWIC диапазона е, не используйте AsQueryable, если вы на самом деле не нужно, использовать анонимный тип в очень простым способом, а также указать тип переменной диапазона, чтобы избежать проблем, связанных с Enum.GetValues ​​только возвращение Array:

var query = from Color c in Enum.GetValues(typeof(Color)) 
      from Vehicle v in Enum.GetValues(typeof(Vehicle)) 
      select new { Color = c, Vehicle = v }; 

(это эквивалентно вызову .Cast<Color> и .Cast<Vehicle> на соответствующих Enum.GetValues вызовов.)

Тогда вы можете написать это так:

foreach (var pair in query) 
{ 
    Console.WriteLine("{{{0}, {1}}}", pair.Color, pair.Vehicle); 
} 
+0

сеньор Скорость! Исправлена ​​проблема кастинга, прежде чем я закончил печатать. –

+0

:) На самом деле я не знаю, что такое фактическое использование AsQueryable.I пропустил эту главу из вашей книги. Я должен ее прочитать. – user215675

+0

Cast() ofType() какой из них хорош? – user215675

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