Почему условие проверки во внутреннем цикле никогда не выполняется?

#c# #.net

#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_countamp;om=112341amp;forum=scoops1
  

Обе ссылки ведут на одну и ту же страницу. Так что это означает, что оба они одинаковы.
Итак, в этом случае оно должно остановиться в точке останова, которую я добавил: строка h = «найдена»;
Но поскольку это никогда не останавливается на достигнутом, я предполагаю, что что-то не так с моим условием IF.

В случае, если это было обнаружено, я хочу удалить ссылку из FilteredLinks, а также из lockedLinks, чтобы удалить то, что предположительно является одинаковыми ссылками из обоих списков. Ссылки не идентичны по адресу, но они ведут на одну и ту же страницу, поэтому я считаю их одинаковыми / идентичными, и их обе следует удалить.

Комментарии:

1. Я полагаю, что ваш собственный вопрос отвечает на это…-

2. Они не совпадают.

3. Учитывая, что две ссылки разные, почему оно должно разрешаться одинаково в contains’?

4. Ссылки не идентичны, но поскольку обе имеют внутри номер 112341, то они ведут на одну и ту же страницу, поэтому я считаю их идентичными и их следует удалить.

5. Тогда почему бы не записать эту логику в свой код?

Ответ №1:

Если вы знаете формат uri, вы можете извлечь идентификатор из разных типов uri и сравнить их:

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

Если вы знаете, что идентификатор всегда числовой, вы можете проанализировать его более точно и сравнить целые числа вместо строк.