如何使用 Lambda 或 Linq 将匿名类型转换为原始类型成员
Posted
技术标签:
【中文标题】如何使用 Lambda 或 Linq 将匿名类型转换为原始类型成员【英文标题】:How to cast anonymous type to primitive type member using Lambda or Linq 【发布时间】:2012-01-04 09:53:23 【问题描述】:您好,我正在尝试使用 Lambda 表达式将匿名类型列表转换为原始类型列表,到目前为止我没有运气。
我知道我可以使用 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.Stringp.name).ToList();
List<int> c = a.Select(p => new System.Int32p.age).ToList();
【问题讨论】:
我认为我们总是需要将它转换为一个对象。谢谢大家的回答。 【参考方案1】: 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.Stringp.name
中使用了 和 。这不是实例化类型的有效方法。
【讨论】:
【参考方案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();
【讨论】:
【参考方案3】:你为什么尝试通过调用构造函数来实例化一个新实例?
这个:
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 中,字符串是不可变的,因此共享字符串实例非常方便。
另请注意,这两种构造甚至都不存在! 另外需要注意的是,调用构造函数时,需要使用 () 而不是
【讨论】:
以上是关于如何使用 Lambda 或 Linq 将匿名类型转换为原始类型成员的主要内容,如果未能解决你的问题,请参考以下文章