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

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

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

Здравствуйте. Прочитал "чистый код" и возник в конце вопрос: насколько это актуально? Я что-то редко видел такие объекты. По сабжу: если тип MyClass может вернуть Null, то мы пишем класс NullMyClass и даем ему поведение по-умлочанию. То есть например было такой код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace NullableProj
  5. {
  6. class Program
  7. {
  8. static void Main()
  9. {
  10. var col = new MyCollection();
  11. col.Add(new Person("Peter",18));
  12. var p = col.GetPersonByName("Anna");
  13. Console.WriteLine(p.Name);
  14. Console.ReadKey();
  15. }
  16. }
  17. class Person
  18. {
  19. public string Name { get; private set; }
  20. public int Age { get; private set; }
  21. public Person(string name, int age)
  22. {
  23. Name = name;
  24. Age = age;
  25. }
  26. }
  27. class MyCollection
  28. {
  29. private readonly List<Person> list = new List<Person>();
  30. public void Add(Person person)
  31. {
  32. list.Add(person);
  33. }
  34. public Person GetPersonByName(string name)
  35. {
  36. return list.FirstOrDefault(x => x.Name == name);
  37. }
  38. }
  39. }
Очевидно, что тут вылетит эксепшн и надо писать
Листинг программы
  1. static void Main()
  2. {
  3. var col = new MyCollection();
  4. col.Add(new Person("Peter",18));
  5. var p = col.GetPersonByName("Anna");
  6. if (p != null)
  7. Console.WriteLine(p.Name);
  8. else
  9. Console.WriteLine("Такого человека не существует!");
  10. Console.ReadKey();
  11. }
В книге предложен вариант: писать вот так:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace NullableProj
  5. {
  6. class Program
  7. {
  8. static void Main()
  9. {
  10. var col = new MyCollection();
  11. col.Add(new Person("Peter",18));
  12. var p = col.GetPersonByName("Anna");
  13. Console.WriteLine(p.Name);
  14. Console.ReadKey();
  15. }
  16. }
  17. class Person
  18. {
  19. public string Name { get; private set; }
  20. public int Age { get; private set; }
  21. public Person(string name, int age)
  22. {
  23. Name = name;
  24. Age = age;
  25. }
  26. }
  27. class NullPerson : Person
  28. {
  29. public NullPerson() : base("Такого человека не существует", 0)
  30. {
  31. }
  32. }
  33. class MyCollection
  34. {
  35. private readonly List<Person> list = new List<Person>();
  36. public void Add(Person person)
  37. {
  38. list.Add(person);
  39. }
  40. public Person GetPersonByName(string name)
  41. {
  42. return list.FirstOrDefault(x => x.Name == name) ?? new NullPerson();
  43. }
  44. }
  45. }
И тогда никаких проверок в вызывающем коде не оказывается, потому что мы никогда не вернем Null, можем вернуть только объект с параметрами по-умолчанию. Вопрос: если такое применяется, почему я нигде такого не видел, а если не применяется, то почему?

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

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

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


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

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

13   голосов , оценка 4 из 5

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

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

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