我有一个实现.ToString()方法的对象列表。我希望找到一个非常容易为列表中的每个项调用.ToString()方法,并获得一个字符串列表。
这是一种在foreach中实现的方法。
List<string> entityNames = new List<string>();
foreach (Entity parent in parents)
{
entityNames.Add(parent.ToString());
}
这是我想出的最好的,有更好的方法吗?
IList<string> entityNames2 = (from parent in parents where true select user.ToString()).ToList();
答案 0 :(得分:6)
列表中有一个ConvertAll()
方法,可以完全按照您的意愿执行。
要从现有列表生成新列表,您可以执行
List<string> entityNames = parents.ConvertAll(p => p.ToString());
请注意parents
必须是一个列表才能使用此方法,该方法未针对IEnumerables定义。
对于IEnumerables,您也可以使用普通select()
,然后再调用ToList()
:
parents.Select(p=>p.ToString()).ToList();
(这相当于查询语法中提到的那一行,但使用linq method syntax)
这比ConvertAll()
效率稍低,在第一种情况下,分配正确大小的新列表一次,在第二种情况下,事先不知道正确的大小,因此新列表需要增长动态。在大多数情况下,这种差异很可能是微不足道的,第二种方法适用于所有IEnumerables,而不仅仅是列表
答案 1 :(得分:0)
有两种方式可以想到:
entityNames = parents.Select(p => p.ToString()).ToList();
或
entityNames = parents.Cast<string>().ToList();
This SO question和this one 提供了有关Select()
和Cast()
方法之间差异的更多信息。
请参阅Enumerable.Select - MSDN和Enumerable.Cast Method - MSDN 了解更多信息。