如何判断没有值时传递的内容

时间:2009-12-02 15:06:57

标签: c# asp.net

对于这段代码,如果查询字符串中没有值,你怎么知道返回null?

HttpContext context = HttpContext.Current;
string strValue = context.Request[name];

我问,因为我不知道在.NET框架中很多情况下返回的是什么,当你不存在它时没有得到预期的值。

所以如果调用context.Request[name];并且查询字符串中不存在名称,你怎么知道它返回null或空字符串以便我可以正确处理它不存在的情况?

5 个答案:

答案 0 :(得分:8)

使用String.IsNullOrEmpty()检查Null或Empty字符串。:

string strValue = !String.IsNullOrEmpty(context.Request[name]) ?? 
    context.Request[name] : "Some Default Value";

或者,如果您没有设置的默认值,可以稍后再进行检查:

if(String.IsNullOrEmpty(strValue))
{
    // It's Null Or Empty
}
else
{
    // It's Not
}

<强>

<强> 更新

刚看到评论。如果你想弄清楚是否引用了Params集合中不存在的密钥(这是你通过简写使用的那个),那么请查看MSDN文档。

在这种情况下,Params是System.Collections.Specialized.NavmeValueCollection。文档是here。根据文档,当在集合中找不到密钥时,确实会返回null值。

因此您不必使用String.IsNullOrEmpty()。你可以:

string strValue = context.Request[name] ?? "Some Default Value";

如果您想设置默认值,或者另外检查null

答案 1 :(得分:1)

正如@Justin Niessner所说,你可以在阅读时检查context.Request[name]是否为null。这非常有效和合理。

如果您对使用空值感到不舒服,可以检查名称为索引的集合。

在您的示例中,context.Request[name]context.Request.Params[name]的简写。 Params是一个NameValueCollection,它又有一个属性AllKeys。假设我们使用的是.NET 3.5,那么你可以像这样使用.Contains():

if (context.Request.Params.AllKeys.Contains(name))
{
   // do something
}

另外,您特别提到您对查询字符串感兴趣。 context.Request []不仅返回查询字符串,还返回Cookies,Form和ServerVariables。对于查询字符串,请使用

if (context.Request.QueryString.AllKeys.Contains(name))
{
   // do something
}

答案 2 :(得分:1)

我认为你问的是'我怎么知道这个物体的行为是什么?' - 在这种情况下,我不知道比“检查文档”更好的答案 - 在这种情况下,HttpContext.Request被记录为HttpRequest类型,而后者被记录为具有{ {1}}文档说明的方法:

  

如果找不到指定的键,则返回空引用(在Visual Basic中为Nothing)。

我不能立即看到的是如果您没有明确地将Item方法用作索引器(Item)方法的名称,如果您没有知道这是一个标准的惯例...

答案 3 :(得分:0)

Request.Params是一个NameValueCollection,如果集合中不存在密钥,它将返回'null'。

所以,如果网址是:

http://localhost

然后context.Request.Params["foo"]将为null

现在,如果请求是:

http://localhost?foo=

然后context.Request.Params["foo"]将为""

我认为这就是你要找的东西。

答案 4 :(得分:0)

你可以使用扩展方法做这样的事情:

if(!Request["Name"].IsNullOrEmpty())
                {
                    // do something with the Request["Name"] value 
                    // OR 
                    // You can extract the Request["Name"] into a variable and do the same with the variable
                }

ExtentionMethod看起来像这样:

  public static bool IsNullOrEmpty(this string str)
        {
            return String.IsNullOrEmpty(str); 
        }

谢谢!