0

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

我希望避免对传入类型的名称进行 switch case 比较,但现在这看起来是我唯一的选择,除非 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) 

    }
4

2 回答 2

2

==forobject总是意味着:引用相等。作为参考,默认是 always null,所以如果!prop.PropertyType.IsValueType, 那么你只需要null检查一下。对于值类型,您将使用 boxing。所以引用相等总是会报告false,除非它们都是Nullable<T>for some T,并且都是空的。但是,要获得“默认”值类型 ( prop.PropertyType.IsValueType),您可以使用Activator.CreateInstance(prop.PropertyType). 请记住,这==不会这里做你想做的事。Equals(x,y) 可能会更好。

于 2013-02-11T20:17:26.853 回答
0

您可以做到这一点,但不能依赖 == 运算符来完成工作。您需要使用 .Equals 或 object.ReferenceEquals 进行比较。

于 2013-02-11T20:16:37.747 回答