Обнуляемые классы (не встроенный Nullable) с параметрами по умолчанию - C#

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

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

Здравствуйте. Прочитал "чистый код" и возник в конце вопрос: насколько это актуально? Я что-то редко видел такие объекты. По сабжу: если тип MyClass может вернуть Null, то мы пишем класс NullMyClass и даем ему поведение по-умлочанию. То есть например было такой код:
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace NullableProj
{
    class Program
    {
        static void Main()
        {
            var col = new MyCollection();
            col.Add(new Person("Peter",18));
            var p = col.GetPersonByName("Anna");
            Console.WriteLine(p.Name);
            Console.ReadKey();
        }
    }
 
    class Person
    {
        public string Name { get; private set; }
        public int Age { get; private set; }
 
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }
    }
 
    class MyCollection
    {
        private readonly List<Person> list = new List<Person>(); 
 
        public void Add(Person person)
        {
            list.Add(person);
        }
 
        public Person GetPersonByName(string name)
        {
            return list.FirstOrDefault(x => x.Name == name);
        }
    }
}
Очевидно, что тут вылетит эксепшн и надо писать
        static void Main()
        {
            var col = new MyCollection();
            col.Add(new Person("Peter",18));
            var p = col.GetPersonByName("Anna");
            if (p != null) 
                Console.WriteLine(p.Name);
            else
                Console.WriteLine("Такого человека не существует!");
            Console.ReadKey();
        }
В книге предложен вариант: писать вот так:
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace NullableProj
{
    class Program
    {
        static void Main()
        {
            var col = new MyCollection();
            col.Add(new Person("Peter",18));
            var p = col.GetPersonByName("Anna");
            Console.WriteLine(p.Name);
            Console.ReadKey();
        }
    }
 
    class Person
    {
        public string Name { get; private set; }
        public int Age { get; private set; }
 
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }
    }
 
    class NullPerson : Person
    {
        public NullPerson() : base("Такого человека не существует", 0)
        {
        }
    }
 
    class MyCollection
    {
        private readonly List<Person> list = new List<Person>(); 
 
        public void Add(Person person)
        {
            list.Add(person);
        }
 
        public Person GetPersonByName(string name)
        {
            return list.FirstOrDefault(x => x.Name == name) ?? new NullPerson();
        }
    }
}
И тогда никаких проверок в вызывающем коде не оказывается, потому что мы никогда не вернем Null, можем вернуть только объект с параметрами по-умолчанию. Вопрос: если такое применяется, почему я нигде такого не видел, а если не применяется, то почему?

Решение задачи: «Обнуляемые классы (не встроенный Nullable) с параметрами по умолчанию»

textual
Листинг программы
if (person.Name == "Такого человека не существует")
   MessageBox.Show("Превед, локализация!");

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


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

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

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