То, что вы просите, на самом деле является анти-паттерном.Что он делает, так это распространяет требование на тонны нулевых проверок в вашем коде.Вы должны не только проверить, все ли свойства имеют значение null, но также проверить, является ли ваш объект нулевым, когда вы хотите его использовать.Также рефлексия очень медленная, и если вы будете делать это часто, вы застрянете в своем приложении.
Вам следует взглянуть на Null Object Pattern .Это в основном делает то, что вы хотите, и вы удаляете все эти надоедливые проверки на нуль:
public class Student
{
public string Name { get; set; }
public string Surname { get; set; }
public Address Address { get; set; }
public Exam Exam { get; set; }
public static Student NullStudent { get; } = new Student
{
Name = null,
Surname = null,
Address = Address.NullAddress,
Exam = Exam.NullExam,
}
}
Вы можете сделать это для каждого объекта в вашем коде, который действует таким образом (вы можете видеть, что я сделал это наваши вложенные адреса и типы экзамена), а затем вместо этого:
if (Student.EverythingIsNull) { Student = null }
if (Student is null) { //do null stuff }
Вы можете сделать это:
if (item == Student.NullStudent) { //do null stuff }
Это приводит к более четкому коду, ваше намерение выделяется большеи вы можете специально определить в каждом объекте, что составляет нуль.