Я хочу автоматически обнаружить некоторую информацию о предоставленном классе, чтобы сделать что-то похожее на запись. В частности, я использую отражение для возврата значения PropertyInfo для каждого свойства. Я могу читать или записывать значения для каждого свойства из моей "формы", но если свойство определено как "int", я бы не смог, и моя программа даже не пыталась написать нулевое значение.
Как я могу использовать отражение, чтобы определить, можно ли присвоить заданное свойство нулевому значению, не записывая оператор switch для проверки всех возможных типов? В частности, я хочу определить разницу между типами в ящике типа "int" и "int?", Так как во втором случае я хочу иметь возможность записать нулевое значение. IsValueType и IsByRef, похоже, не видят разницы.
public class MyClass
{
// Should tell me I cannot assign a null
public int Age {get; set;}
public DateTime BirthDate {get; set;}
public MyStateEnum State {get; set;}
public MyCCStruct CreditCard {get; set;}
// Should tell me I can assign a null
public DateTime? DateOfDeath {get; set;}
public MyFamilyClass Famly {get; set;}
}
Обратите внимание, что мне нужно определить эту информацию задолго до того, как я попытаюсь записать значение, поэтому использование обработки исключений, обернутое вокруг SetValue, не является вариантом.