Я модернизирую существующее приложение, в котором реализован класс Constants для домашнего пивоварения в объектах business и datalayer.
Я хочу заменить это типами Nullable и исключить класс констант, который выглядит следующим образом, но со всеми типами данных, не допускающими NULL:
class Constants
{
public static int nullInt
{
get { return int.MinValue; }
}
}
Эти константы vaules используются как значения по умолчанию для почти всех свойств объекта, например:
private decimal _unitPrice = Constants.nullInt;
public decimal UnitPrice
{
get { return _unitPrice; }
set { _unitPrice = (value == null) ? Constants.nullInt : value; }
}
Это вызывает некоторую путаницу при сохранении свойств объекта в БД, поскольку все десятичные и целые должны быть проверены на наличие псевдо-нулевых значений, иначе вы сохраните такие вещи, как int.MinValue, в БД.
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 свойства в исходном коде будет избыточной. Я все еще хочу знать, может ли код, реализующий этот объект, иметь какие-либо проблемы, связанные с изменением типа на десятичное? с десятичное