我们假设我有一个班级:
public class MyClass
{
public string Name {get; set;}
public int Value {get; set;}
}
我有这个班级的清单:
List<MyClass>
我想做一个:
List<string>
将包含来自:
的所有MyClass.NameList<MyClass>
例如,使用Linq有一种快速的方法吗?
答案 0 :(得分:11)
当然,请使用Select
和ToList
:
List<string> nameList = list.Select(x => x.Name).ToList();
另一种非LINQ方式是使用List.ConvertAll
:
List<string> nameList = list.ConvertAll(x => x.Name);
这稍微高效一点,因为它事先知道目标列表的大小。
答案 1 :(得分:3)
这非常简单,您只需要一个Select()
,然后使用List<T>
在ToList()
中实现结果:
List<string> result = list.Select(x=>x.Name).ToList();
答案 2 :(得分:1)
如果您的代码中有很多类型转换(例如从实体模型到DTO),请查看Automapper。这允许您将所有映射定义放在中心位置。它也可以按惯例转换对象。
using AutoMapper;
// only set up once in mapping config
CreateMap<MyClass, string>().ConvertUsing(src => src.Name);
// usage
var myClass = new MyClass { Name = "the name" };
string result = Mapper.Map<string>(myClass);
它可以通过将已知映射应用于每个成员来解决收集问题。
MyClass[] myClassArray = new [] { myClass1, myClass2 };
string[] result = Mapper.Map<string[]>(myClassArray);