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

Mie*_*ter 0 c# list-comprehension

我有一个实现.ToString()方法的对象列表.我期望找到一个非常容易为列表中的每个项调用.ToString()方法,并获得字符串列表.

这是一种在foreach中完成它的方法.

List<string> entityNames = new List<string>();
foreach (Entity parent in parents)
{
    entityNames.Add(parent.ToString());
}
Run Code Online (Sandbox Code Playgroud)

这是我想出的最好的,有更好的方法吗?

IList<string> entityNames2 = (from parent in parents where true select user.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)

Hug*_*une 6

List有一个ConvertAll()完全符合你想要的方法.

要从现有列表生成新列表,您可以这样做

List<string> entityNames = parents.ConvertAll(p => p.ToString());
Run Code Online (Sandbox Code Playgroud)

请注意,parents必须是此列表才能使用,该方法未针对IEnumerables定义.

对于IEnumerables,您也​​可以使用法线select(),然后再调用ToList():

parents.Select(p=>p.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)

(这相当于您在查询语法中提出的行,但使用linq方法语法)

这比ConvertAll()在第一种情况下分配正确大小的新列表一次的效率稍低,在第二种情况下,预先不知道正确的大小,因此新列表需要动态增长.在大多数情况下,这种差异很可能是微不足道的,第二种方法适用于所有IEnumerables,而不仅仅是列表