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

本文关键字:永远 条件 检查 循环 为什么 | 更新日期: 2023-09-27 18:11:34

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 = "found";但是因为它从来没有停止在那里,我猜是我的IF条件有问题。

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

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

如果你知道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总是数字,你可以更准确地解析它,比较整数而不是字符串。