首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IQueryable与IEnumerable...Extension方法

IQueryable与IEnumerable...Extension方法
EN

Stack Overflow用户
提问于 2012-05-15 04:32:05
回答 1查看 621关注 0票数 0

说真的,我一定错过了一些简单的东西。任何帮助都将不胜感激。

这是一个场景: 1)创建一个名为DoSomething的IQueryable扩展方法,并使用适当的签名(IQueryable,int x,int y)。2)创建一个名为DoSomething的IEnumerable扩展方法,使用与IQueryable相同的签名,只是接受/返回IEnumerable而不是IQueryable。3)在IEnumerable扩展方法中,将enumerable转换为Queryable (AsQueryable)并尝试调用IQueryable.DoSomething方法。

由于某些原因,上面的场景似乎是对IEnumerable扩展方法而不是IQueryable进行递归调用。我不明白为什么。

我知道IQueryable扩展了IEnumerable;但是,.NET扩展似乎可以检测到并正常工作。例如,至少通过智能感知(和ReSharper),variable.AsQueryable().Take(1)将调用Queryable扩展,而不是Enumerable扩展。当我编写自己的代码时,它似乎不起作用,并且创建了一个无限循环。

EN

回答 1

Stack Overflow用户

发布于 2012-05-30 06:55:44

我相信答案是它像你所描述的那样工作得很好。这是我的小LINQPad测试程序。诚然,这个场景比您描述的场景稍微简单一些,因为我返回void并且不带任何参数。

代码语言:javascript
运行
复制
void Main()
{
    int[] numbers = { 1, 2, 3, 4, 5 };
    numbers.AsQueryable().DumpLast<int>();
    numbers.DumpLast<int>();
}

public static class TestExtensions
{
    public static void DumpLast<T>(this IQueryable<T> list)
    {
        list.Last<T>().Dump();
    }

    public static void DumpLast<T>(this IEnumerable<T> list)
    {
        list.AsQueryable().DumpLast<T>();
    }
}

输出:

代码语言:javascript
运行
复制
5
5

如果你能提供一个更具体的例子,那么也许我们可以发现一些引起问题的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10590603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档