将对象列表转换为字符串列表

91
有没有一种方式可以在c#或vb.net中将List(of Object)转换为List(of String),而不必遍历所有项?(在后台进行迭代很好-我只想要简洁的代码) 更新:最好的方法可能就是进行新的选择。
myList.Select(function(i) i.ToString()).ToList();
或者
myList.Select(i => i.ToString()).ToList();
7个回答

94

不可能在不迭代的情况下构建新列表。你可以将列表包装在一个实现了IList接口的容器中。

你可以使用LINQ从对象列表中获取IEnumerable<string>的延迟计算版本,例如:

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

26
不使用过滤列表的OfType方法,而是使用Select(i => i.ToString())。 - Geoff Appleford
1
@geoff:取决于你想要什么。如果一个元素为空,i.ToString将会失败。你也可以考虑使用Cast<string>()。 - Mehrdad Afshari
2
@MehrdadAfshari:不管如何处理空值,OfType()都会过滤掉不是字符串的项——它不会尝试进行强制转换或调用ToString(),它们只会被过滤掉。这不是所要求的内容。 - Daniel Schaffer
3
我理解这个问题是:您有一个只包含字符串对象的 List<object>,并且您希望获得这些对象的 List<string>。该问题并不清楚输入是什么,根据输入规范和目标,您可以选择使用 OfType<string>Cast<string>()Select(...) - Mehrdad Afshari

66

这适用于所有类型。

List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();

27

如果你想更加控制转换的方式,你可以使用ConvertAll:

var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());

是的,它确实可以,但是这是在幕后进行的。 - kenny

12
你的意思是像这样吗?
List<object> objects = new List<object>();
var strings = (from o in objects
              select o.ToString()).ToList();

1
只需要这样做: List<string> strings = (from o in objects select o.ToString()).ToList(); - steve_c
1
我需要将一个(app)用户对象列表转换为List<string>,以便进行环境迁移。这种方法的微小改进对我非常有效。var userIDsSource = (from r in MigrationSession.UsersSource select r.UserID).ToList(); - Developer63

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

使用“选择”来选取特定列。

3
不行-如果你想转换列表的所有元素,那么你必须以某种方式接触列表的所有元素。您可以以不同的方式指定/编写迭代(例如foreach()......或.ConvertAll()或任何其他方式),但最终,某些代码将迭代每个元素并将其转换。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接