У меня есть Lazy<T>
, инициализированный лямбдой. Как увидеть тело инициализирующей лямбды во время отладки? Я ожидаю иметь что-то вроде DebugView
класса Expression
, но я ничего не нашел.Как отладить Lazy <T>?
ответ
Потому что Lazy<T>
принимает делегата, нет Expression
класса. Ваша лямбда скомпилирована, как и любой другой код в вашем проекте, и нет предварительного просмотра этого кода во время отладки.
Lambda выражение может быть скомпилировано либо в IL, либо преобразовано в дерево выражений. Что происходит, зависит от контекста. Если ваш параметр объявлен как делегированный, будет генерироваться обычный IL-код. Если это Expression<TFunc>
, вы получите дерево выражений, которое можно просмотреть.
Это хорошо explained on MSDN, основанный на методе Where
, который имеет две версии: Enumerable.Where
который принимает Func<T, bool>
и Queryable.Where
, который принимает Expression<Func<T, bool>>
.
При использовании синтаксиса метода на основе для вызова метода Where в классе
Enumerable
(как это делается в LINQ к объектам и LINQ к XML) параметр является типом делегатаSystem.Func<T, TResult>
. Выражение lambda - самый удобный способ создания этого делегата. При вызов такого же метод, например,System.Linq.Queryable
класса (как это делается в LINQ к SQL), то параметр типа являетсяSystem.Linq.Expressions.Expression<Func>
гдеFunc
любой из делегатовFunc
с до шестнадцати входных параметров. Опять же, выражение лямбда является очень кратким способом построения этого выражения tree. lambdas позволяют вызовамWhere
выглядеть одинаково, хотя в факт, что тип объекта, созданный из лямбда, отличается.
- 1. Lazy <T> как Lazy <object> возможно?
- 2. Как использовать выражение генератора CMake $ <TARGET_FILE: tgt>?
- 3. Force Renew TGT
- 4. Encapsulate Lazy <T>
- 5. CAS: Расшифровка TGT
- 6. Kerberos TGT Behavior
- 7. Кинжал не инициализируется Lazy <T> lazy Variable?
- 8. Lazy <T, TMetaData> -> Lazy <dynamic, TMetaData> без создания экземпляра?
- 9. Невозможно установить свойство «TGT» нулевой
- 10. Как GSSManager.createCredential получает ключ Kerberos и TGT?
- 11. Как защитить файл cookie CAS-сервера TGT?
- 12. Невозможно неявно конвертировать Lazy <Class> в Lazy <Interface>
- 13. Lazy <T> в глазах GC?
- 14. Generics with Lazy <T>
- 15. Lazy <T> (bool) Документация конструктора
- 16. Lazy <T> действительно ленив
- 17. Lazy <T> метод повторной инициализации?
- 18. Истекает Lazy <T> класс
- 19. Вручную установить значение Lazy <T>
- 20. Automapper: Как мне отобразить Lazy <TFrom> в TTo?
- 21. Как вы можете использовать Lazy <> с AutoMock (Moq)
- 22. Как отладить мой PHP-код
- 23. Может ли CAS (Jasig) перезагрузить сервер TGT?
- 24. В чем отличие от новых Lazy <Foo>() до новых Lazy <Foo> (() => new Foo())?
- 25. Получение TGT с использованием принципала сервиса
- 26. Как указать кеш кеша кебера TGT в beeline
- 27. Как отладить программу MPI?
- 28. Как отладить NSFetchRequest
- 29. Как отладить elisp?
- 30. Как отладить проект VSPackage
У меня есть 3k Lazy объектов, инициализированных различными lambdas. Некоторые из них приводят к ошибкам. Ярбды содержат выражение LINQ, и я не могу поставить точки останова, чтобы увидеть, что происходит. Конечно, я могу переписать их в более «удобном для понимания месте», но ... Я думал, что должно быть более разумное решение. –
f0rt