Проверьте, равно ли десятичное значение null

Я хотел бы проверить, является ли десятичное число NULL или имеет какое-то значение, поскольку значение назначается из базы данных в объекте класса:

public decimal myDecimal{ get; set; }

а затем я

myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());

Я пытаюсь:

if (rdrSelect[23] != DBNull.Value)
                    {
                        myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());
                    }

Но я получаю следующее:

результат выражения всегда "истинный", поскольку значение типа "decimal" никогда не равен null

Как проверить, имеет ли это десятичное число какое-то значение?

Ответ 1

У десятичного числа всегда будет определенное значение по умолчанию. Если вам понадобится десятичный символ nullable, вы можете использовать decimal?. Затем вы можете сделать myDecimal.HasValue

Ответ 2

decimal является value type в .NET. И значения типов не могут быть null. Но если вы используете nullable type для своего decimal, то вы можете проверить свой decimal на null или нет. Как myDecimal?

Nullable types - это экземпляры System.Nullable struct. Нулевая тип может представлять нормальный диапазон значений для его базового значения тип, плюс дополнительное значение null.

if (myDecimal.HasValue)

Но я думаю, что в вашей базе данных, если этот столбец содержит значения NULL, то не должен быть типом decimal.

Ответ 3

Предполагая, что вы читаете из строки данных, вы хотите:

if ( !rdrSelect.IsNull(23) ) 
{ 
   //handle parsing
}

Ответ 4

вы можете использовать этот код

if (DecimalVariable.Equals(null))  
{
   //something statements
}

Ответ 5

Decimal - это тип значения, поэтому, если вы хотите проверить, имеет ли оно значение, отличное от значения, которое оно было инициализировано (ноль), вы можете использовать условие myDecimal!= default (десятичное).

В противном случае вам следует рассмотреть возможность использования типа с нулевым (десятичным?) и использовать такое условие, как myNullableDecimal.HasValue

Ответ 6

Если вы вытаскиваете это значение непосредственно из базы данных SQL, а значение здесь равно null, это будет фактически объект DBNull, а не null. Либо поставьте проверку перед преобразованием и используйте значение по умолчанию в случае DBNull, либо замените нулевую проверку после проверки на rdrSelect[23] для DBNull.

Ответ 7

Вы также можете создать удобные функции утилиты для обработки значений из БД в таких случаях. Ex. Ниже приведена функция, которая дает вам Nullable Decimal из типа объекта.

    public static decimal? ToNullableDecimal(object val)
    {
        if (val is DBNull ||
            val == null)
        {
            return null;
        }
        if (val is string &&
            ((string)val).Length == 0)
        {
            return null;
        }
        return Convert.ToDecimal(val);
    }