C# 奇怪的lambda表达式行为#

C# 奇怪的lambda表达式行为#,c#,.net,linq,lambda,C#,.net,Linq,Lambda,有一个代码: private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { try { //TODO: this lambda-expression starts infinite loop return Plugins.Keys.First(x => x.FullName == ar

有一个代码:

    private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        try
        {
            //TODO: this lambda-expression starts infinite loop
            return Plugins.Keys.First(x => x.FullName == args.Name);
           /* this code works fine
            foreach (Assembly xx in Plugins.Keys)
                if (xx.FullName == args.Name) return xx;
            return null;
            */
        }
        catch
        {
            return null;
        }
    }
发生什么事了?或者是工作日结束时的我?:)

编辑: 代码中没有例外。我运行了调试器,然后返回Plugins.Keys.First(x=>x.FullName==args.Name);方法一次又一次地以args.Name=“System.Core.resources bla bla bla bla”启动。
当我使用foreach语句时,方法成功返回,并且没有循环。这似乎是程序集解决的问题。

我可以看到您的代码没有任何问题,所以无限循环一定是由其他原因引起的

除此之外,最好只使用

// no need for try/catch
return Plugins.Keys.FirstOrDefault(x => x.FullName == args.Name);

返回Plugins.Keys.Where(x=>x.FullName==args.Name).First()你得到的异常是什么?你是如何得出这是一个无限循环的结论的?你试过只记录
args.Name
在这个方法顶部的内容吗?这将立即告诉您发生了什么…看起来lambda表达式的执行开始了解析程序集的循环。