有没有办法在c#或vb.net中将List(of Object)
转换为List(of String)
而无需遍历所有项目? (幕后迭代很好 - 我只想要简洁的代码)
更新 最好的方法可能只是做一个新的选择
myList.Select(function(i) i.ToString()).ToList();
或
myList.Select(i => i.ToString()).ToList();
答案 0 :(得分:73)
不迭代构建新列表是不可能的。您可以将列表包装在实现IList的容器中。
您可以使用LINQ从对象列表中获取IEnumerable<string>
的惰性评估版本,如下所示:
var stringList = myList.OfType<string>();
答案 1 :(得分:32)
这适用于所有类型。
List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();
答案 2 :(得分:22)
如果您想要更好地控制转换的方式,可以使用ConvertAll:
var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());
答案 3 :(得分:8)
你的意思是这样的吗?
List<object> objects = new List<object>();
var strings = (from o in objects
select o.ToString()).ToList();
答案 4 :(得分:3)
否 - 如果您要转换列表中的所有元素,则必须以这种或那种方式触摸该列表中的所有元素。
你可以用不同的方式指定/编写迭代(foreach()......,或.ConvertAll()或其他),但最后,不管怎样,一些代码将迭代每个元素并转换它。
马克
答案 5 :(得分:2)
List<string> myList Str = myList.Select(x=>x.Value).OfType<string>().ToList();
使用“选择”选择特定列
答案 6 :(得分:1)
在构建List(对象)时可以进行字符串转换吗?这是在创建List(对象)后避免枚举整个列表的唯一方法。