你调用的对象是空的?搜索结果分页

时间:2013-08-06 18:01:19

标签: c# asp.net

这段代码应该如何编写?我将对象引用设置为 上的对象实例if(!query.Keys [i] .Contains(“ddl”))

string getLink(int toPage)
{
    NameValueCollection query = HttpUtility.ParseQueryString(Request.Url.Query);
    query["p"] = toPage.ToString();

    string url = Request.Path;
    int count = query.Count;

    for (int i = 0; i < count; i++)
    {
        if (!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)));
    }

5 个答案:

答案 0 :(得分:2)

如上所述,检查空值。以下是一个极端的检查,但最好是安全而不是抱歉。

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)));
    }
}

答案 1 :(得分:2)

您可以将其重写为

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

答案 2 :(得分:1)

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

  • 如果查询为空,请检查第一次迭代。
  • 如果query.Keys [i]为空,则检查每次迭代

在调试模式下,您还可以检查问题发生的迭代(已经i == 0或更高版本?)。否则,在不知道发生了什么的情况下很难说清楚。

我也不知道你怎么期望除了你以外的任何人能够在两年内维护if语句下面的代码......简化它可能是有道理的。

答案 3 :(得分:0)

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

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



}

取决于count的目的。由于超过字典的长度,您很可能会收到错误。这将解决这个问题。

答案 4 :(得分:0)

我认为初始化可能存在问题

  NameValueCollection query = HttpUtility.ParseQueryString(Request.Url.Query);

可能有问题
HttpUtility.ParseQueryString(Request.Url.Query)

部分代码。