【问题标题】:C# List<string[]> to List<object[]> ConversionC# List<string[]> 到 List<object[]> 的转换
【发布时间】:2012-06-25 02:47:29
【问题描述】:

所有,我是不是疯了(这不是问题)。我想将List&lt;string[]&gt; 转换为List&lt;object[]&gt;

List<string[]> parameters = GetParameters(tmpConn, name);
List<object[]> objParams = parameters.OfType<object[]>();

这不起作用,但除非我忘记了什么,否则应该可以使用这种方法进行转换(不需要 Lambda)?

感谢您的宝贵时间。

【问题讨论】:

    标签: c# type-conversion


    【解决方案1】:

    你想使用类似的东西:

    List<object[]> objParams = parameters.OfType<object[]>().ToList();
    

    或者在 C# 4.0 中,只是

    List<object[]> objParams = parameters.ToList<object[]>();
    

    List<object[]> objParams = parameters.ConvertAll(s => (object[])s);
    

    【讨论】:

      【解决方案2】:

      OfType&lt;string[]&gt; 返回 IEnumerable&lt;string[]&gt;,而不是 List&lt;object[]&gt;

      Enuemrable.OfType 过滤掉任何无效的转换。你可能想考虑Enumerable.Cast,如果你犯了错误就会抛出。如果string[] 不继承自object[](我真的不记得了),您可能需要调用Enumerable.Select 来提供转换。

      你肯定需要在某个地方调用 Enumerable.ToList。

      【讨论】:

        【解决方案3】:

        由于数组协方差,在 .NET 4.0 中,您可以这样做:

        // Works because:
        // a) In .NET, a string[] is an object[]
        // b) In .NET 4.0, an IEnumerable<Derived> is an IEnumerable<Base>              
        var result = parameters.ToList<object[]>();
        

        但请注意,除了字符串之外,您无法对这些数组进行变异(因为数组协方差并不是真正安全的)。

        如果你想要真正灵活的可写对象数组,你可以这样做:

        var result = parameters.Select(array => array.ToArray<object>())
                               .ToList();
        

        (或)

        var result = parameters.ConvertAll(array => array.ToArray<object>());
        

        然后你可以用你喜欢的几乎任何类型的实例替换每个内部数组的元素。

        【讨论】:

        • 谢谢。但是,尽管我最初输入了问题。上面的第一个是我尝试过的,但没有var,为什么在这种情况下var 会产生重大影响——我想答案是它正在为我做演员ToList()。真棒……感谢您的宝贵时间。
        • var 不是必需的,您可以使用List&lt;object[]&gt; result = parameters.ToList&lt;object[]&gt;();,所以我不确定您最初的尝试哪里出错了。
        【解决方案4】:

        这样做怎么样

        List<string[]> sList = new List<string[]> {new []{"A", "B"}};
        List<object[]> oList = sList.Cast<object[]>().ToList();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-27
          • 2018-09-22
          • 1970-01-01
          • 1970-01-01
          • 2018-12-27
          • 1970-01-01
          相关资源
          最近更新 更多