我使用反射来获取对象的所有属性。然后,我需要查看这些属性的值是否是它们碰巧的任何类型的默认值。以下是我目前的代码。它抱怨无法找到命名空间或类型。这让我相信它与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)
}
答案 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进行比较。