Дебаггинг анонимных методов и лямбда-выражений - C#
Формулировка задачи:
Добрый вечер. Написал свой первый более-менее серьезный и полезный проект на C# и уперся в дебаггинг. По опыту микроконтроллеров знаю, что стадия дебаггинга гораздо сложнее и важнее, чем, собственно, само написание кода. А с этим у меня пока не все радужно.
Допустим, у нас есть класс:
К нему надо преобразовать список, считанный из какого-то файла:
Знаю два способа. Первый - классический:
И с использованием лямбд:
Оба работают. Но теперь сажаем небольшую багу в исходный список:
Оба вываливаются. Но в первом случае компилятор сразу покажет на строку 10, можно поглядеть переменные в дебаггере, поставить точки остановки, пошагово прогнать. А во втором случае он просто показывает на весь код return new Actor{...} сразу. И, как я понял из гугления, поставить внутрь точку остановки нельзя никак, пошаговый прогон не работает.
Так как дебажить анонимов и лямбды? Здесь, понятно, можно и в голове проанализировать. Но по опыту знаю, особо хитрые баги не сразу найдешь, даже видя полные параметры системы.
public class Actor { public string name; // имя. public string surname; // фамилия. public int age; // возраст. public string character; // роль. }
List<string> input = new List<string> { "Том|Харди|38|Макс", "Шарлиз|Терон|40|Фуриоса", "Хью|Кияс-Бёрн|68|Несмертный Джо" };
List<Actor> madMaxActors = new List<Actor>(); foreach (string str in input) { string[] buffWords = str.Split('|'); Actor currActor = new Actor(); currActor.name = buffWords[0]; currActor.surname = buffWords[1]; currActor.age = int.Parse(buffWords[2]); currActor.character = buffWords[3]; madMaxActors.Add(currActor); }
List<Actor> madMaxActors = input.Select( str => { string[] buffWords = str.Split('|'); return new Actor { name = buffWords[0], surname = buffWords[1], age = int.Parse(buffWords[2]), character = buffWords[3] }; }).ToList();
List<string> input = new List<string> { "Том|Харди|38|Макс", "Шарлиз|Терон|40лет|Фуриоса", "Хью|Кияс-Бёрн|68|Несмертный Джо" };
Решение задачи: «Дебаггинг анонимных методов и лямбда-выражений»
textual
Листинг программы
List<Actor> oldActorsFromMadMax = madMaxActors.FindAll( actor => { bool result = actor.age > 50; return result; } ).ToList();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д