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

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

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

Добрый вечер. Написал свой первый более-менее серьезный и полезный проект на C# и уперся в дебаггинг. По опыту микроконтроллеров знаю, что стадия дебаггинга гораздо сложнее и важнее, чем, собственно, само написание кода. А с этим у меня пока не все радужно. Допустим, у нас есть класс:
    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|Несмертный Джо"
        };
Оба вываливаются. Но в первом случае компилятор сразу покажет на строку 10, можно поглядеть переменные в дебаггере, поставить точки остановки, пошагово прогнать. А во втором случае он просто показывает на весь код return new Actor{...} сразу. И, как я понял из гугления, поставить внутрь точку остановки нельзя никак, пошаговый прогон не работает. Так как дебажить анонимов и лямбды? Здесь, понятно, можно и в голове проанализировать. Но по опыту знаю, особо хитрые баги не сразу найдешь, даже видя полные параметры системы.

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

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

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


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

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

15   голосов , оценка 4.067 из 5
Похожие ответы