奇怪的lambda表达行为C#

时间:2012-04-25 11:15:42

标签: 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 == 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“。 当我使用foreach语句方法成功返回并且没有循环时。这似乎是集会解决问题。

1 个答案:

答案 0 :(得分:2)

我可以看到你的代码没有任何问题,所以无限循环必须由其他东西引起。

除此之外,最好只使用

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