在列表中的每个项目上调用.ToString()方法的正确方法是什么?

时间:2014-09-28 00:21:43

标签: c# list-comprehension

我有一个实现.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();

2 个答案:

答案 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 questionthis one 提供了有关Select()Cast()方法之间差异的更多信息。

请参阅Enumerable.Select - MSDNEnumerable.Cast Method - MSDN 了解更多信息。