我通过反射检查对象的属性,并继续处理每个属性的数据类型.这是我的(减少的)来源:
private void ExamineObject(object o)
{
Type type = default(Type);
Type propertyType = default(Type);
PropertyInfo[] propertyInfo = null;
type = o.GetType();
propertyInfo = type.GetProperties(BindingFlags.GetProperty |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
// Loop over all properties
for (int propertyInfoIndex = 0; propertyInfoIndex <= propertyInfo.Length - 1; propertyInfoIndex++)
{
propertyType = propertyInfo[propertyInfoIndex].PropertyType;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我新近需要处理可空属性,但我不知道如何获得可空属性的类型.
我正在使用可空类型进行一些测试,并且它没有像我预期的那样工作:
int? testInt = 0;
Type nullableType = typeof(int?);
Assert.AreEqual(nullableType, testInt.GetType()); // not the same type
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
DateTime? test = new DateTime(434523452345);
Assert.IsTrue(test.GetType() == typeof(Nullable)); //FAIL
DateTime? test = new DateTime(434523452345);
Assert.IsTrue(test.GetType() == typeof(Nullable<>)); //STILL FAIL
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么testInt.GetType()返回int,而typeof(int?)返回真正的可空类型?
为什么这个代码段的输出System.Int32代替Nullable<Int32>?
int? x = 5;
Console.WriteLine(x.GetType());
Run Code Online (Sandbox Code Playgroud)