您好我正在尝试使用Lambda Expression将匿名类型列表转换为基本类型列表,到目前为止我没有运气。
我知道我可以使用foreach循环播放' a'并获取值,但我想知道如何在Lambda或Linq中执行此操作。
var a = new []{ new {name= "jerry", age = 32}, new {name="peter",age=23}};
List<string> b = a.Select(p => new System.String{p.name}).ToList();
List<int> c = a.Select(p => new System.Int32{p.age}).ToList();
答案 0 :(得分:2)
var a = new[] { new { name = "jerry", age = 32 },new {name = "peter", age = 23}};
List<string> b = a.Select(p => p.name).ToList();
List<int> c = a.Select(p => p.age).ToList();
答案 1 :(得分:2)
var a = new[] { new { name = "jerry", age = 32 }, new { name = "peter", age = 23 } };
List<string> b = a.Select(p => p.name).ToList();
List<int> c = a.Select(p => p.age).ToList();
问题在于您在new System.String{p.name}
中使用{和}。这不是实例化类型的有效方法。
答案 2 :(得分:2)
为什么要尝试通过调用构造函数来实例化一个新实例?
这样:
var a = new []{ new {name= "jerry", age = 32}, new {name="peter",age=23}};
List<string> b = a.Select(p => p.name}).ToList();
List<int> c = a.Select(p => p.age).ToList();
工作正常。 p.Age是一个整数,因此是一个值类型。这意味着它是按值复制的,因此您可以在列表中获得唯一的副本c。 p.name是一个字符串。在.NET中,字符串是不可变的,因此共享字符串实例完全可以保存。
另请注意,这两种结构都不存在! 另一个注意事项是,在调用构造函数时,您需要使用()而不是{}