2009-12-01 42 views
2

两个枚举-Getting可能对,什么是应用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 }; 

(这相当于呼吁各Enum.GetValues电话.Cast<Color>.Cast<Vehicle>。)

然后,你可以写出来是这样的:

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

阅兵式速度!在我输入完成之前更正了投射问题。 – 2009-12-01 21:20:52

+0

:)其实我不知道AsQueryable的实际用法是什么,我从你的书中跳过了那章。我必须读它。 – user215675 2009-12-01 21:25:38

+0

Cast()的Type()哪个好? – user215675 2009-12-01 21:27:08