我正在使用C#.net,此时我收到了NullReferenceException:
Request.Params.AllKeys.Any(l => l.Contains("stringImLookingFor"));
在调试中使用它,"stringImLookingFor"
是一个常量(所以永远不会null
):
var aux = Request;
var aux2 = Request.Params;
var aux3 = Request.Params.AllKeys;
这些都不是null
。我想问题是因为l.Contains("stringImLookingFor")
返回null
。知道怎么解决吗??
THX。
答案 0 :(得分:3)
您的错误是因为以下之一为空:
你无法分辨哪一个来自单线。要么坚持断点并手动检查它们,要么添加一个检查代码以查看每个是否为空。
更新
会推荐
Request.Params.AllKeys.Any(l => !String.IsNullOrEmpty(l) &&
l.Contains("stringImLookingFor"));
答案 1 :(得分:0)
你确定Request.Params或"stringImLookingFor"
(如果它是变量,不是常量)不是空的吗?
答案 2 :(得分:0)
我发现了问题。感谢@Ian!
我在Request.Params.AllKeys上有一个空键。到现在为止,我的解决方案是:
列出ParamsList = Request.Params.AllKeys.Where(l =>!string.IsNullOrEmpty(l))。ToList();
ParamsList.Any(l => l.Contains(“CourseName”))
如果有人发现更好的东西,请告诉我:)
答案 3 :(得分:0)
您的第二个解决方案可能效率很低。
List ParamsList = Request.Params.AllKeys.Where(l => !string.IsNullOrEmpty(l)).ToList();
ParamsList.Any(l => l.Contains("CourseName"));
以上要求迭代整个集合以生成新列表,然后迭代该新列表,直到找到匹配的元素。以下应该会好一点:
Request.Params.AllKeys
.Where(l => !string.IsNullOrEmpty(l))
.Any(l => l.Contains("CourseName");
这会在我们调用Any
之前过滤我们的任何空值。这也意味着整个集合只有一次迭代,并且一旦找到课程就会停止。