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
}