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

本文关键字:方法 是什么 ToString 调用 列表 | 更新日期: 2023-09-27 18:24:43

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

这里有一种用前臂做的方法。

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();

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

List有一个ConvertAll()方法,它可以完全执行您想要的操作。

要从现有列表生成新列表,您需要执行

List<string> entityNames = parents.ConvertAll(p => p.ToString());

注意,parents必须是一个列表才能工作,该方法不是为IEnumerables定义的。

对于IEnumerables,您也可以使用普通的select(),然后调用ToList()

parents.Select(p=>p.ToString()).ToList();

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

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

脑海中浮现出两种方式:

entityNames = parents.Select(p => p.ToString()).ToList();

entityNames = parents.Cast<string>().ToList();

这个SO问题和这个问题有更多关于Select()Cast()方法之间差异的信息。

请参阅Enumerable.Select-MSDN和Enumerable.Cast方法-MSDN了解更多信息。