对于这段代码,如果查询字符串中没有值,你怎么知道返回null?
HttpContext context = HttpContext.Current;
string strValue = context.Request[name];
我问,因为我不知道在.NET框架中很多情况下返回的是什么,当你不存在它时没有得到预期的值。
所以如果调用context.Request[name];
并且查询字符串中不存在名称,你怎么知道它返回null或空字符串以便我可以正确处理它不存在的情况?
答案 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'。
所以,如果网址是:
然后context.Request.Params["foo"]
将为null
。
现在,如果请求是:
然后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);
}
谢谢!