这段代码应该如何编写?我将对象引用设置为 上的对象实例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)));
}
答案 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)
调试您的应用程序;在导致异常的行中设置断点。
在调试模式下,您还可以检查问题发生的迭代(已经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)
部分代码。