Ошибка ExecuteScalar с нулевым значением

Это мой код..

    object o = DBExecuteScalar(myQuery);
    if ((int.parse(o.ToString())) <= 2 || (o is null))
    {
        // my task....
    }

В этом коде часть «o is null» выдает ошибку. Любая помощь, как справиться с этими обоими условиями в одном выражении if. Я хочу, чтобы значение o было (null, 0, 1, 2). Любая помощь ??


person user3563084    schedule 07.05.2014    source источник


Ответы (3)


В C# оператор is проверяет равенство типов. Вам нужно проверить значение null как o == null:

object o = DBExecuteScalar(myQuery);
if ((o == null) || (int.parse(o.ToString())) <= 2)
{
        // my task....
}

Вам также необходимо проверить значение null, прежде чем пытаться выполнить с ним какие-либо действия.

person CodingIntrigue    schedule 07.05.2014

когда вы меняете условия в if, тогда это должно работать.

В вашем случае сначала вызывается ToString для объекта o. Но поскольку o равно null, это приведет к исключению. Когда вы измените порядок своих условий, то проверка на ноль будет первой. Вторая часть or (||) оценивается только тогда, когда первая часть ложна. Это предотвратит возникновение исключения

person Ruben    schedule 07.05.2014

С || первое условие оператора оценивается первым - вы хотите сначала проверить, является ли оно нулевым. Также int.Parse не нужен. Как упомянул RGraham, null - это неправильный способ проверки на null.

 if (o == null || o == DBNull.Value || (int)o <= 2)
person Ondrej Svejdar    schedule 07.05.2014