检查列表中的任何单词是否包含部分字符串.net的问题

时间:2011-03-14 10:42:33

标签: .net c#-4.0

我正在使用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。

4 个答案:

答案 0 :(得分:3)

您的错误是因为以下之一为空:

  • 请求
  • Request.Params
  • Request.Params.AllKeys
  • l(在l.Contains()中使用。如果你设法在某处获得一个空键,就会发生这种情况)

你无法分辨哪一个来自单线。要么坚持断点并手动检查它们,要么添加一个检查代码以查看每个是否为空。

更新

会推荐

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之前过滤我们的任何空值。这也意味着整个集合只有一次迭代,并且一旦找到课程就会停止。