为什么内循环中的检查条件永远不变?

时间:2014-07-04 18:40:14

标签: c# .net

for (int i = 0; i < ExtractLinks.FilteredLinks.Count; i++)
            {
                for (int x = 0; x < lockedLinks.Count; x++)
                {
                    if (ExtractLinks.FilteredLinks[i].Contains(lockedLinks[x]))
                    {
                        string h = "found";
                    }
                }
            }

我想检查两个列表中是否存在相同的链接。 FilteredLinks和lockedLinks都输入List

我使用了断点,在FilteredLink中我看到了这个链接,例如:

http://rotter.net/forum/scoops1/112341.shtml

在lockedLinks中这个链接:

http://rotter.net/cgi-bin/forum/dcboard.cgi?az=read_count&om=112341&forum=scoops1

两个链接都指向同一页面。所以这意味着两者都是一样的。 所以在这种情况下它应该在我添加的断点处停止:string h =&#34; found&#34 ;; 但是因为它永远不会停在那里我想我的IF条件有问题。

如果发现我想要从FilteredLinks中删除链接,也要从lockedLinks中删除链接以从两个列表中删除相同的链接。链接在地址上不相同,但是它们通向同一页面,所以我认为它们是相同/相同的,并且它们都应该被删除。

1 个答案:

答案 0 :(得分:1)

如果你知道uri格式,那么你可以从不同的uri类型中提取id并比较它们:

private static string GetArticleIdFiltered(string filtered)
{
    var uri = new Uri(filtered);
    return Path.GetFileNameWithoutExtension(uri.LocalPath);
}

private static string GetArticleIdLocked(string locked)
{
    var uri = new Uri(locked);
    var queryParams = HttpUtility.ParseQueryString(uri.Query);
    return queryParams["om"];
}

for (int x = 0; x < lockedLinks.Count; x++)
{
    var lockedArticle = GetArticleIdLocked(lockedLinks[x]);
    var filteredId = GetArticleIdFiltered(ExtractLinks.FilteredLinks[i]);
    if (lockedArticle == filteredId)
    {
        string h = "found";
    }
}

如果你知道id总是数字,你可以更准确地解析它并比较int而不是字符串。