Дебаггинг анонимных методов и лямбда-выражений - C#

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Дебаггинг анонимных методов и лямбда-выражений»

textual
Листинг программы
  1.         List<Actor> oldActorsFromMadMax = madMaxActors.FindAll(
  2.                
  3.             actor =>
  4.                 {
  5.                     bool result = actor.age > 50;
  6.                     return result;
  7.                 }
  8.                 ).ToList();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы