【问题标题】:IEnumerable interface and Skip method in MonoMono中的IEnumerable接口和Skip方法
【发布时间】:2012-10-25 09:19:20
【问题描述】:

我正在寻找IEnumerable接口的Skip方法。

IList public IEnumerable 接口,所以我以为我可以访问该方法。

无论如何,以下代码在 Mono 上编译失败:

private static void SkipFirst(IList<float> list)
{
    IList<float> skippedFirst = list.Skip(1);
}

这是错误:

错误 CS1061:键入 System.Collections.Generic.IList<float>' does not contain a definition forSkip' 并且找不到扩展方法 Skip' of type System.Collections.Generic.IList'(你是 缺少 using 指令或程序集引用?)

我做错了什么?如何从IList 接口访问该方法?

【问题讨论】:

  • 尝试在cs文件中添加对System.Core包和using System.Linq的引用

标签: c# mono ienumerable ilist


【解决方案1】:

Skip 是一个扩展方法,因此它实际上不是任何集合类的方法。相反,它是由 Linq 定义的。您需要添加对 Linq 的引用: using System.Linq;

list.Skip(1)只是语法糖,实际上是转换成Enumerable.Skip(list, 1)

另外,Skip 返回IEnumerable&lt;T&gt;,这意味着您需要使用任一

IList<float> skippedFirst = list.Skip(1).ToList();

IEnumerable<float> skippedFirst = list.Skip(1);

【讨论】:

    【解决方案2】:
    1. 您在使用时忘记了using System.Linq
    2. Skip 是 LINQ 方法,因此您需要在将 skip 与 ToList() 方法一起使用后转换为列表。

    最终结果:

    using System.Linq;
    
    // some code
    
    private static void SkipFirst(IList<float> list)
    {
        IList<float> skippedFirst = list.Skip(1).ToList();
    }
    

    【讨论】:

    • 为了完整起见,很可能将skippedFirst 声明为IEnumerable&lt;float&gt; 比添加.ToList() 更好;这取决于skippedFirst 的使用方式。
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多