【问题标题】:No ConvertAll for LinkedList<T>?LinkedList<T> 没有 ConvertAll?
【发布时间】:2010-10-18 15:27:57
【问题描述】:

有没有人有扩展方法来使用Converter&lt;TInput, TOutput&gt; 快速转换LinkedList&lt;T&gt; 中的类型?

我有点惊讶,ConvertAll&lt;TOutput&gt;(delegate)在哪里?

【问题讨论】:

    标签: c# .net vb.net linked-list converter


    【解决方案1】:

    Linq 扩展方法中的 ConvertAll 等效项称为 Select

    var result = myLinkedList.Select(x => FancyCalculationWith(x))
    

    【讨论】:

    • 当然,假设 LinkedList 实现了 IEnumerable。我不熟悉 LinkedList
    • (不同之处在于 List.ConvertAll 当然能够预先分配正确大小的缓冲区,因为它知道现有大小。)
    【解决方案2】:

    取决于你想从中得到什么,但你可以使用 Cast 然后枚举生成的 IEnumerable。

      public class Foo
      {
        ...
      }
    
      public class Bar : Foo
      {
        ...
      }
    
      var list = new LinkedList<Bar>();
      .... make list....
    
      foreach (var foo in list.Cast<Foo>())
      {
          ...
      }
    

    【讨论】:

      【解决方案3】:

      作为tvanfosson says,可以使用Cast&lt;T&gt;,但如果您想避免InvalidCastException,您可以使用OfType&lt;T&gt; 扩展方法,该方法将静默传递列表中无法转换为类型的项目您提供的泛型类型参数。

      【讨论】:

        猜你喜欢
        • 2010-11-08
        • 1970-01-01
        • 2011-08-17
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        相关资源
        最近更新 更多