Странное поведение при сравнении с нулевым - PullRequest
0 голосов
/ 11 октября 2011

У меня есть сетка, берущая данные из источника данных объекта. Источник данных объекта получает данные из метода, который принимает один параметр (строку). Параметр предоставляется из URL-адреса страницы с использованием строки запроса, а значением по умолчанию является null. В методе, принимающем параметр, я пытаюсь проверить, является ли параметр пустым, вернуть все данные, иначе вернуть данные с идентификатором, полученным из параметра - например. код.

public list<string> MyMethod (string param)
    {
        if(param == null)
    {
       return // all
    }
    else
    {
       return // id with param
    }
    }

Я попытался отладить программу, и параметр фактически нулевой, но оператор if () всегда находится в "ложном" состоянии. т.е. param == null, всегда оцениваемый как false. Я попытался String.IsNullorEmpty (param), и он все еще оценивается как ложный. Я не понимаю, в чем проблема. Пожалуйста помоги. Большое спасибо.

enter image description here

Ответы [ 5 ]

2 голосов
/ 11 октября 2011

После того, как вы добавили скриншот, теперь мы видим, что вы переходите к методу "null", а не к параметру null.

Я не знаком с QueryString, но, возможно, это поможет:

Если вы используете QueryStringParameter, вы можете установить эти свойства для получения null вместо "null":

<asp:QueryStringParameter DefaultValue="" ConvertEmptyStringToNull="True" />

также вам нужно установить

<asp:SqlDataSource CancelSelectOnNullParameter="False" />
2 голосов
/ 11 октября 2011

Вы абсолютно уверены, что объект нулевой, есть большая разница между пустой строкой и нулевым объектом !!

if(String.IsNullorEmpty(param))
{
return list;
}
else
{
return list.findIndex(param);
}
2 голосов
/ 11 октября 2011

Дай угадаю. Возможно, ваш входной параметр param имеет "null", а не null. Например, в вашем случае

if (param == null) // you're comparing "null" == null which will always be false.

Редактировать

Suggesstion: добавьте param, чтобы посмотреть окно и проверить, какое значение. Я уверен, что в вашем случае это нечто иное, чем null.

2 голосов
/ 11 октября 2011

Вы пробовали проходить и отлаживать (при условии, что вы используете visual studio)?

Установите точку останова на сигнатуре вашего метода, а затем наведите курсор мыши на переменную param, чтобы увидеть, каково ее значениепосле каждого шага.

Отладка поможет вам довольно быстро определить источник таких проблем.

Изменить

Добавленный скриншот показывает ваш параметрпеременная равна строке "null", а не null.

Вы можете изменить свой оператор if на if (param == "null"), и это должно сработать, но реальное исправление для этого наиболеескорее всего, вообще не будет использовать строку «null», поэтому потребуется редактирование везде, где вы назначаете переменную, передаваемую функции.

Кроме того, ваш пример кода имеет значение param == null, а ваш снимок экрана - param! = Null.Знак! = Не равен, я не уверен, что это просто опечатка или вы не заметили.

1 голос
/ 11 октября 2011

Попробуйте:

if (String.IsNullOrEmpty(param))
{
}

С помощью этого синтаксиса вы также можете установить строку "".

...