Дебаггинг анонимных методов и лямбда-выражений - 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д