与null比较时的奇怪行为

时间:2011-10-11 11:12:48

标签: c# asp.net gridview objectdatasource

我有一个gridview从对象数据源获取数据。对象数据源从采用一个参数(字符串)的方法获取数据。该参数使用querystring从页面url提供,默认值设置为null。在方法取参数中,我试图检查参数是否为null返回所有数据返回数据 从参数中获取id - 例如代码。

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

我尝试调试程序,param实际上是null但if()语句总是处于“false”状态。即param == null总是评估为false。我尝试了String.IsNullorEmpty(param),它仍在评估为false。我不明白问题是什么。请帮忙。 非常感谢。

enter image description here

5 个答案:

答案 0 :(得分:2)

让我猜一下。可能是您的输入参数param具有"null"而非null的情况。例如,在您的情况下

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

修改

宝贵意见: 将param添加到观察窗口并检查值是多少。在你的情况下,我非常确定它不是null

答案 1 :(得分:2)

您是否尝试过单步调试(假设您正在使用visual studio)?

在方法签名上放置一个断点,然后将鼠标悬停在param变量上,看看每个步骤后它的值是什么。

调试将帮助您快速识别此类问题的根源。

修改

您添加的屏幕截图显示您的param变量等于字符串“null”,而不是null

您可以将if语句更改为if(param ==“null”)并且这应该可行,但是对此的真正修复很可能根本不使用字符串“null”,因此需要在任何地方进行编辑您分配传递给函数的变量。

此外,您的代码示例是param == null但您的屏幕截图是param!= null。 !=表示不相等,我不确定这只是一个错字还是你没有注意到。

答案 2 :(得分:2)

您是否绝对确定该对象为null,空字符串与空对象之间存在很大差异!!

if(String.IsNullorEmpty(param))
{
return list;
}
else
{
return list.findIndex(param);
}

答案 3 :(得分:2)

现在添加了屏幕截图后,我们可以看到您传递给方法"null"参数而不是null

我不熟悉QueryString,但这可能会有所帮助:

如果您使用QueryStringParameter,则可以将这些属性设置为null而不是"null"

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

你也需要设置

<asp:SqlDataSource CancelSelectOnNullParameter="False" />

答案 4 :(得分:1)

尝试:

if (String.IsNullOrEmpty(param))
{
}

使用此语法,您还可以将字符串设置为""