Есть ли рекомендуемый или предпочтительный способ сочетания C # 7 "Bodied Constructors" с другими действиями, такими как проверка нуля и создание исключений?
При написании класса C #,Я привык к тому, что в своем конструкторе я могу тестировать аргументы для нулей (и генерировать исключения, если это необходимо), например: -
class Person
{
private string _name;
private SomeClass _someClass;
public Person(string name, SomeClass someClass)
{
_name = name ?? throw new ArgumentNullException(nameof(name));
_someClass = someClass?? throw new ArgumentNullException(nameof(someClass));
}
}
Я только что узнал о Конструкторах с выражениями ,где простая версия моего кода может выглядеть следующим образом: -
class Person
{
private string _name;
private SomeClass _someClass;
public Person(string name, SomeClass someClass)
=> (_name, _someClass) = (name, someClass);
}
Вышеизложенное изначально кажется привлекательным из-за возможности сократить объем стандартного кода, необходимого для назначения аргументов переменным-членам.
Однако, похоже, я упустил возможность включить такие действия, как вышеупомянутая проверка нуля, поскольку больше нет тела конструктора.
Насколько я могу судить, единственный способвокруг это встроенный код, такой как проверка на нуль-слияние, например: -
...
public Person(string name, SomeClass someClass)
=> (_name, _someClass) =
(
name ?? throw new ArgumentNullException(nameof(name ),
someClass ?? throw new ArgumentNullException(nameof(someClass)
));
Хотя я и пытался улучшить разборчивость с помощью пробелов, на мой взгляд, вышесказанное не так просточитать как исходный пример - и на самом деле не сохранил никакой печати.
В: Есть ли лучший способ, которым я мог бы подойти к этому, или я побеждаю цель этого нового стиля конструктора?(т.е. я должен просто придерживаться оригинального подхода)