对列表中的每个项调用.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();
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了解更多信息。