C# 对象引用未设置为对象的实例?搜索结果分页

C# 对象引用未设置为对象的实例?搜索结果分页,c#,asp.net,C#,Asp.net,这段代码应该如何编写?如果(!query.Keys[I].Contains(“ddl”) string-getLink(int-toPage) { NameValueCollection query=HttpUtility.ParseQueryString(Request.Url.query); 查询[“p”]=toPage.ToString(); 字符串url=Request.Path; int count=query.count; for(int i=0;i

这段代码应该如何编写?如果(!query.Keys[I].Contains(“ddl”)

string-getLink(int-toPage)
{
NameValueCollection query=HttpUtility.ParseQueryString(Request.Url.query);
查询[“p”]=toPage.ToString();
字符串url=Request.Path;
int count=query.count;
for(int i=0;i
如前所述,检查空值。以下是一个极端检查,但最好是安全的,而不是抱歉

for (int i = 0; i < count; i++) {
    if (query != null &&
        query.Keys != null &&
        i < query.Keys.Count &&
        query.ContainsKey(i) &&
        query.Keys[i] != null &&
        query.GetValues(i) != null &&
        !query.Keys[i].Contains("ddl"))  {
            url += string.Format(
                "{0}{1}={2}",
                i == 0 ? "?" : "&",
                query.Keys[i],
                query.Keys[i] == "category" ? string.Join("TTT", query.GetValues(i)).Replace(" ", "+") : string.Join(",", query.GetValues(i)));
    }
}
for(int i=0;i
如前所述,检查空值。以下是一个极端检查,但最好是安全的,而不是抱歉

for (int i = 0; i < count; i++) {
    if (query != null &&
        query.Keys != null &&
        i < query.Keys.Count &&
        query.ContainsKey(i) &&
        query.Keys[i] != null &&
        query.GetValues(i) != null &&
        !query.Keys[i].Contains("ddl"))  {
            url += string.Format(
                "{0}{1}={2}",
                i == 0 ? "?" : "&",
                query.Keys[i],
                query.Keys[i] == "category" ? string.Join("TTT", query.GetValues(i)).Replace(" ", "+") : string.Join(",", query.GetValues(i)));
    }
}
for(int i=0;i
您可以将其重写为

if (query!=null && query.ContainsKey(i) && !query.Keys[i].Contains("ddl")) 
你可以把它改写成

if (query!=null && query.ContainsKey(i) && !query.Keys[i].Contains("ddl")) 

我不知道你的代码,但看起来你可以简单地重写for循环

for (int i = 0; i < query.Count-1; i++)
{



}
for(int i=0;i

取决于
计数的目的。
您很可能由于超出词典长度而出错。这将解决此问题。

我不知道您的代码,但看起来您可以简单地重写for循环

for (int i = 0; i < query.Count-1; i++)
{



}
for(int i=0;i

根据
计数的目的,您很可能由于超出词典长度而出现错误。这将解决此问题。

调试应用程序;在导致异常的行中设置断点

  • 如果查询为空,则在第一次迭代中检查
  • 如果query.Keys[i]为空,则检查每次迭代
在调试模式下,您还可以检查问题发生的迭代(i==0或更高版本?),否则,在不知道发生了什么的情况下很难判断


我也不知道您如何期望除您之外的任何人能够在两年内维护if语句下面的代码……简化它可能是有意义的。

调试您的应用程序;在导致异常的行中设置断点

  • 如果查询为空,则在第一次迭代中检查
  • 如果query.Keys[i]为空,则检查每次迭代
在调试模式下,您还可以检查问题发生的迭代(i==0或更高版本?),否则,在不知道发生了什么的情况下很难判断


我也不知道您如何期望除您之外的任何人能够在两年内维护if语句下面的代码……简化它可能是有意义的。

我认为初始化可能有问题

  NameValueCollection query = HttpUtility.ParseQueryString(Request.Url.Query);
可能有什么问题

HttpUtility.ParseQueryString(Request.Url.Query)

部分代码。

我认为初始化可能有问题

  NameValueCollection query = HttpUtility.ParseQueryString(Request.Url.Query);
可能有什么问题

HttpUtility.ParseQueryString(Request.Url.Query)

代码的一部分。

检查NULL.ALWAYS.if(query.Keys.Contains(i)和&!query.Keys[i].Contains(“ddl”)
?您在哪里设置
计数的值?
以及
查询
从哪里来?@Yuck string getLink(int-toPage){NameValueCollection query=HttpUtility.ParseQueryString(Request.Url.Query);Query[“p”]=toPage.ToString();string Url=Request.Path;int count=Query.count;检查NULL.ALWAYS
?您在哪里设置
计数的值
?以及
查询
从哪里来?@Yuck string getLink(int-toPage){NameValueCollection query=HttpUtility.ParseQueryString(Request.Url.query);query[“p”]=toPage.ToString();string Url=Request.Path;int-count=query.count;