在运行时获取未知类型的默认值

时间:2013-02-11 20:08:37

标签: c# reflection types type-conversion type-coercion

我使用反射来获取对象的所有属性。然后,我需要查看这些属性的值是否是它们碰巧的任何类型的默认值。以下是我目前的代码。它抱怨无法找到命名空间或类型。这让我相信它与c#如何进行隐式强制有关。由于我在运行时抓取类型,因此不知道如何比较它或者那些不太清楚的东西。

我希望避免一个切换案例比较进入的类型的名称,但现在看起来像我唯一的选择,除非StackOverflow上出色的人能够引导我朝着正确的方向前进。

 private bool testPropertyAttribute(PropertyInfo prop)
    {
        dynamic value = prop.GetValue(DataObject, null);
        Type type = prop.PropertyType;

        /* Test to see if the value is the defult of its type */
        return (value == default(prop.PropertyType) 

    }

2 个答案:

答案 0 :(得分:2)

对于==

object始终意味着:引用相等。作为参考,默认值始终为null,因此如果!prop.PropertyType.IsValueType,则只需null检查。对于价值类型, 你将是拳击 。因此,引用相等性始终会报告 false ,除非它们对于某些Nullable<T>都是T,并且两者都是空的。但是,要获得“默认”值类型(prop.PropertyType.IsValueType),您可以使用Activator.CreateInstance(prop.PropertyType)。请记住,== 会在此处执行您想要的操作。 Equals(x,y) 可能会更好地工作。

答案 1 :(得分:0)

你可以这样做,你不能依靠==运算符来完成工作。您将要使用.Equals或object.ReferenceEquals进行比较。