Обнуляемые классы (не встроенный 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("Превед, локализация!");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д