【发布时间】:2010-01-07 05:23:22
【问题描述】:
我正在升级已在其业务和数据层对象中实现自制常量类的现有应用程序。
我想用 Nullable 类型替换它,并用常量类替换它,看起来像这样,但使用所有不可为 null 的数据类型:
class Constants
{
public static int nullInt
{
get { return int.MinValue; }
}
}
这些常量值被用作几乎所有对象属性的默认值,如下所示:
private decimal _unitPrice = Constants.nullInt;
public decimal UnitPrice
{
get { return _unitPrice; }
set { _unitPrice = (value == null) ? Constants.nullInt : value; }
}
这会导致在将对象属性保存到 Db 时出现一些混淆,因为必须检查所有小数和整数是否有伪 null 值,否则您会将 int.MinValue 之类的内容保存到 Db。
private void Save()
{
//Datalayer calls and other props omitted
SqlParameter sqlParm = new SqlParameter();
sqlParm.Value = (this.UnitPrice == Constants.nullInt) ? DBNull.Value : (object)this.UnitPrice;
}
好的,现在的问题.. 我想改变使用 Nullable 值类型的东西,如下面的示例所示,属性会从小数变为小数吗?影响实现这些对象的任何代码?
public decimal? UnitPrice { get; set; }
private void Save()
{
//Datalayer calls and other props omitted
SqlParameter sqlParm = new SqlParameter();
sqlParm.Value = this.UnitPrice ?? DBNull.Value;
}
编辑:感谢您对我的重构的双重检查,是的,对原始代码中属性的 SET 的空检查将是多余的。我仍然想知道实现此对象的代码是否会出现从 decimal
类型更改为 decimal? 的任何问题【问题讨论】: