将List(of object)转换为List(of string)


76

有没有办法到转换List(of Object)List(of String)C#或vb.net没有通过所有的项目迭代?(在后台进行迭代很好–我只需要简洁的代码)

更新: 最好的方法可能只是做一个新的选择

myList.Select(function(i) i.ToString()).ToList();

要么

myList.Select(i => i.ToString()).ToList();

Answers:


81

如果不迭代构建新列表,则无法实现。您可以将列表包装在实现IList的容器中。

您可以使用LINQIEnumerable<string>从这样的对象列表中获取懒惰的评估版:

var stringList = myList.OfType<string>();

21
代替OfType(用于过滤列表),请使用Select(i => i.ToString())
Geoff Appleford,2009年

1
@geoff:取决于您要查找的内容。如果元素为null,则i.ToString将失败。您可能还考虑了Cast <string>();。
mmx

2
@MehrdadAfshari:不管是否进行空处理,OfType()都会过滤掉不是字符串的项目-它不会尝试强制转换或调用ToString(),它们只会被过滤掉。那不是要求的。
丹尼尔·谢弗

1
@DanielSchaffer我读的问题是:您有一个仅List<object>包含string对象的对象,而您想获取其中的一个List<string>对象。问题不清楚输入的是什么。根据输入的规格和你的目标,你可能想选择OfType<string>Cast<string>()Select(...)
mmx



11

你的意思是这样吗?

List<object> objects = new List<object>();
var strings = (from o in objects
              select o.ToString()).ToList();

1
只需执行以下操作:List <string> strings =(从对象中的o中选择o.ToString())。ToList();
steve_c

1
我需要将(应用程序)用户对象的列表转换为List <string>,以进行环境迁移用例。略微修改此方法对我很有用。 var userIDsSource = (from r in MigrationSession.UsersSource select r.UserID).ToList();
Developer63

3

否-如果要转换列表的所有元素,则必须以一种或另一种方式触摸该列表的所有元素。

您可以用不同的方式(foreach()......或.ConvertAll()或其他方式)指定/编写迭代,但最后,一种或另一种方式是,一些代码将遍历每一个元素并将其转换。

马克


1

构建List(of object)时可以进行字符串转换吗?这是避免在创建List(of object)之后枚举整个列表的唯一方法。


0
List<string> myList Str = myList.Select(x=>x.Value).OfType<string>().ToList();

使用“选择”选择特定的列

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.