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

Geo*_*ord 69 c# vb.net generics

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

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

myList.Select(function(i) i.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)

要么

myList.Select(i => i.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 75

没有迭代来构建新列表是不可能的.您可以将列表包装在实现IList的容器中.

您可以使用LINQ IEnumerable<string>从对象列表中获取惰性评估版本,如下所示:

var stringList = myList.OfType<string>();
Run Code Online (Sandbox Code Playgroud)

  • 而不是OfType(过滤列表)使用Select(i => i.ToString()) (17认同)
  • @DanielSchaffer 我读到的问题是:你有一个仅包含“string”对象的“List&lt;object&gt;”,而你想获取这些对象的“List&lt;string&gt;”。问题不清楚输入是什么;根据输入规范和您的目标,您可能需要选择 `OfType&lt;string&gt;`、`Cast&lt;string&gt;()` 或 `Select(...)`。 (3认同)
  • @MehrdadAfshari:不管如何处理空值,OfType() 都会过滤掉不是字符串的项目——它不会尝试强制转换或调用 ToString(),它们只会被过滤掉。这不是被要求的。 (2认同)

小智 36

这适用于所有类型.

List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();
Run Code Online (Sandbox Code Playgroud)


Dan*_*fer 24

如果您想要更好地控制转换的方式,可以使用ConvertAll:

var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());
Run Code Online (Sandbox Code Playgroud)


cta*_*cke 10

你的意思是这样的?

List<object> objects = new List<object>();
var strings = (from o in objects
              select o.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)


小智 6

List<string> myList Str = myList.Select(x=>x.Value).OfType<string>().ToList();
Run Code Online (Sandbox Code Playgroud)

使用“选择”选择特定列