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表达式的执行开始了解析程序集的循环。