2012-04-25 6 views
-1

Существует код:Странное поведение лямбда-выражения C#

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; 
     } 
    } 

Что происходит? Или может быть, это я в конце рабочего дня? :)

EDIT: В коде отсутствуют исключения. Я запустил отладчик и после вернул плагины.Keys.First (x => x.FullName == args.Name); метод запускался снова и снова с помощью args.Name = "System.Core.resources bla bla bla". Когда я использовал метод foreach, метод успешно вернулся и не было цикла. Кажется, проблема разрешения сборки.

+1

'вернуть Plugins.Keys.Where (х => x.FullName == args.Name) .Первый(); ' –

+0

Какое исключение вы получаете? –

+0

Как вы заключаете, что это бесконечный цикл? – daryal

ответ

2

Нет ничего плохого в коде, который я вижу, поэтому бесконечный цикл должен быть вызван чем-то другим.

Кроме этого, было бы лучше использовать только

// no need for try/catch 
return Plugins.Keys.FirstOrDefault(x => x.FullName == args.Name); 
Смежные вопросы