C# 如何为动态属性类型分配空值

C# 如何为动态属性类型分配空值,c#,ado.net,C#,Ado.net,基本上,我需要一个转换器将DataReader对象转换为泛型类型 所以当我这样做的时候- while(dataReader.HasRows()){ var result= dataReader.ConvertToObject<MyModel>(); } 但是,当数值类型对象的结果为空时,转换失败 基本上,我要做的是当结果值是type-System.Nullable[System.Decimal] 然后 或 value = (System.DateTime?)null //f

基本上,我需要一个转换器将
DataReader
对象转换为泛型类型

所以当我这样做的时候-

while(dataReader.HasRows()){
    var result= dataReader.ConvertToObject<MyModel>();
}
但是,当数值类型对象的结果为空时,转换失败

基本上,我要做的是当结果值是type-
System.Nullable[System.Decimal]

然后

value = (System.DateTime?)null //for DateTime
value = (System.Int32?)null //for Int32
我试图获取的动态属性类型

if (value == System.DBNull.Value)
{
    value = (prop.PropertyType ?) null; // to get it dynamic
}

这不管用。请告诉我我必须做什么?

您不能将
null
指定为
t
类型的值,因为它可能不是
t
的有效值。(思考
int
等)

但是,您可以使用
default(T)
,它将是
T
的默认值-例如,如果您未初始化
T
类型的字段,则会得到相同的值。这将是:

  • 对于引用类型,为null文本
  • 对于可为null的值类型,类型的null值
  • 对于不可为空的值类型,“全零”值(0表示所有数值等)

您是否尝试过使用
default(T)
?您是否考虑过使用像PetaPoco这样的微型ORM?@JonSkeet,还没有。让我try@mjwills,对我来说比较新。应该给它一个try@JonSkeet,使用
default(T)
获得此工作。谢谢
if (value == System.DBNull.Value)
{
  value = (System.Decimal?) null;
}
value = (System.DateTime?)null //for DateTime
value = (System.Int32?)null //for Int32
if (value == System.DBNull.Value)
{
    value = (prop.PropertyType ?) null; // to get it dynamic
}