【问题标题】:Convert List(of object) to List(of string)将列表(对象)转换为列表(字符串)
【发布时间】:2010-10-03 14:00:43
【问题描述】:

有没有办法在 c# 或 vb.net 中将 List(of Object) 转换为 List(of String) 而无需遍历所有项目? (幕后迭代很好——我只想要简洁的代码)

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

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

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

【问题讨论】:

    标签: c# vb.net generics


    【解决方案1】:
    List<string> myList Str = myList.Select(x=>x.Value).OfType<string>().ToList();
    

    使用“选择”选择特定列

    【讨论】:

      【解决方案2】:

      这适用于所有类型。

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

      【讨论】:

        【解决方案3】:

        你的意思是这样的?

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

        【讨论】:

        • 只需这样做: List strings = (from o in objects select o.ToString()).ToList();
        • 我需要将 (app) User 对象列表转换为 List 以用于环境迁移用例。这种方法的一个小改动对我很有用。 var userIDsSource = (from r in MigrationSession.UsersSource select r.UserID).ToList();
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 是的,但它在幕后。
          【解决方案6】:

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

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

          马克

          【讨论】:

            【解决方案7】:

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

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

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

            【讨论】:

            • 使用 Select(i => i.ToString()) 代替 OfType(过滤列表)
            • @geoff:取决于你在寻找什么。如果元素为空,i.ToString 将失败。你也可以考虑 Cast();
            • @MehrdadAfshari:不管 null 处理如何,OfType() 都会过滤掉不是字符串的项目——它不会尝试强制转换或调用 ToString(),它们只会被过滤掉。这不是所要求的。
            • @DanielSchaffer 我将问题解读为:您有一个仅包含string 对象的List&lt;object&gt;,而您想获得这些对象的List&lt;string&gt;。这个问题不清楚输入是什么;根据输入规范和您的目标,您可能需要选择OfType&lt;string&gt;Cast&lt;string&gt;()Select(...)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-01-17
            • 2015-02-25
            • 2018-05-01
            • 1970-01-01
            • 2017-11-10
            相关资源
            最近更新 更多