奇怪的 lambda 表达式行为 C#

本文关键字:表达式 lambda | 更新日期: 2023-09-27 18:32:16

有一个代码:

    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 后。姓名);方法一次又一次地从 args 开始。名称 ="System.Core.resources bla bla"。当我使用 foreach 语句方法成功返回并且没有循环时。这似乎是程序集解决问题。

奇怪的 lambda 表达式行为 C#

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

除此之外,最好只使用

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