使用反射确定C#中可空属性的DateTime类型

24

我有一个关于如何确定对象的 Nullable 属性类型的问题。

ObjectA 有一个属性 DateTime? CreateDate;

当我通过以下代码迭代其属性时,如何检查属性是否为可空的 DateTime 类型?

foreach (PropertyInfo pi in ObjectA.GetType().GetProperties())
{
    //do the compare here
}
3个回答

55
pi.PropertyType == typeof(DateTime?)

另外一个问题是,我如何根据类型执行 switch 操作?我必须使用 FullName 吗?还是应该使用“if”语句?一个可空的 DateTime 类型的字符串 FullName 是什么?谢谢 - Eatdoku
1
我强烈建议您使用if,避免使用FullName。 如果您想看到DateTime?FullName,那么只需打印出typeof(DateTime?).FullName-但它会很冗长,使您的代码难以阅读,变得脆弱(如果您偶尔在某个地方删除了一个字符怎么办?),并且会导致比较速度变慢(Type对象本身是按引用比较的-i.e.对于任何给定的类型最多只有一个'Type'对象,因此如果两个引用相等,则这是相同的类型;这样的比较很快)。 - Pavel Minaev

4
pi.PropertyType == typeof(Nullable<DateTime>);

1

尝试:

property.PropertyType.Equals(typeof(DateTime?))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接