我每隔X秒从计时器刻度事件调用此类:
WebClient contents = new WebClient();
List<string> links = new List<string>();
public static List<string> FilteredLinks = new List<string>();
List<string> Respones = new List<string>();
public static List<List<string>> Threads = new List<List<string>>();
public void Links(string FileName)
{
HtmlDocument doc = new HtmlDocument();
doc.Load(FileName);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
HtmlAttribute att = link.Attributes["href"];
if (att.Value.StartsWith("http://rotter.net/forum/scoops1"))
{
links.Add(att.Value);
}
}
for (int i = 0; i < links.Count; i++)
{
int f = links[i].IndexOf("#");
string test = links[i].Substring(0, f);
FilteredLinks.Add(test);
}
链接和FilteredLinks都是类型列表 我需要它将检查列表中是否已存在项目不再添加它们。 由于它从一个计时器嘀嗒事件中调用,因此每隔X秒,列表就会一遍又一遍地使用相同的项目成长。
答案 0 :(得分:6)
使用HashSet代替List。这样,您就不必检查重复的字符串。
HashSet<string> links = new HashSet<string>();
集合是一个不包含重复元素的集合,
http://msdn.microsoft.com/en-us/library/bb359438(v=vs.110).aspx
答案 1 :(得分:3)
有三种方法可以解决您的问题
使用正确的数据结构。 HashSet为L.B pointed out。
在完成添加后,使用Distinct生成一个只有不同的列表
links = link.Distinct();
在致电添加
if (!links.Contains(att.Value))
links.Add(att.Value);
如果案件存在问题,您需要传递一个StringComparer例如
if (!links.Contains(att.Value, StringComparer.InvariantCultureIgnoreCase ))
答案 2 :(得分:0)
您可以为此
制作自己的方法 public boolean isPresent(List mylist,String search)
{
for(String str: myList) {
if(str.trim().contains(search))
return true;
}
return false;
}