Обнуляемые классы (не встроенный 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("Превед, локализация!");