Обнуляемые классы (не встроенный Nullable) с параметрами по умолчанию - C#
Формулировка задачи:
Здравствуйте. Прочитал "чистый код" и возник в конце вопрос: насколько это актуально? Я что-то редко видел такие объекты. По сабжу: если тип MyClass может вернуть Null, то мы пишем класс NullMyClass и даем ему поведение по-умлочанию. То есть например было такой код:
Очевидно, что тут вылетит эксепшн и надо писать
В книге предложен вариант: писать вот так:
И тогда никаких проверок в вызывающем коде не оказывается, потому что мы никогда не вернем Null, можем вернуть только объект с параметрами по-умолчанию. Вопрос: если такое применяется, почему я нигде такого не видел, а если не применяется, то почему?
Листинг программы
- 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();
- }
- }
- }
Решение задачи: «Обнуляемые классы (не встроенный Nullable) с параметрами по умолчанию»
textual
Листинг программы
- if (person.Name == "Такого человека не существует")
- MessageBox.Show("Превед, локализация!");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д