有没有办法在c#或vb.net中将List(of Object)
转换为List(of String)
而不迭代所有项目? (幕后迭代是好的 - 我只想简洁的代码)将列表(的对象)转换为列表(的字符串)
更新: 很可能只是做一个新的,最好的办法选择
myList.Select(function(i) i.ToString())
或
myList.Select(i => i.ToString());
有没有办法在c#或vb.net中将List(of Object)
转换为List(of String)
而不迭代所有项目? (幕后迭代是好的 - 我只想简洁的代码)将列表(的对象)转换为列表(的字符串)
更新: 很可能只是做一个新的,最好的办法选择
myList.Select(function(i) i.ToString())
或
myList.Select(i => i.ToString());
不可能无需重复建立新列表。您可以将列表包装在实现IList的容器中。
您可以使用LINQ从对象列表这样得到的IEnumerable<string>
一个懒惰的评估版本:
var stringList = myList.OfType<string>();
否 - 如果要转换一个列表的所有元素,你就必须触摸全部该列表中的元素以某种方式或另一种方式。你可以用不同的方式(foreach()......或.ConvertAll()或其他)来指定/写入迭代,但最后,不管怎样,某些代码将会迭代遍历每个元素并将其转换。
马克
如果你想在转换是如何发生的更多的控制,你可以使用ConvertAll:
var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());
你的意思是这样的吗?
List<object> objects = new List<object>();
var strings = (from o in objects
select o.ToString()).ToList();
您可以在List(object)构建时进行字符串转换吗?这将是避免List(of object)创建后枚举整个列表的唯一方法。
这适用于所有类型。
List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();
相反OfType(其过滤列表)的使用选择(我=> i.ToString()) – 2009-05-22 10:14:02
@geoff:取决于你在找什么。如果一个元素为null,则i.ToString将失败。你也可以考虑Cast(); –
2009-05-22 19:43:46
@MehrdadAfshari:无论空处理如何,OfType()都会过滤掉不是字符串的项 - 它不会尝试转换或调用ToString(),它们只会被过滤掉。这不是要求的。 – 2013-07-16 15:20:29