如何制作列表清单?然后添加到每个List值?

时间:2014-06-17 15:07:09

标签: c# .net winforms

class ExtractLinks
{
    WebClient contents = new WebClient();
    string cont;

    List<string> links = new List<string>();
    List<string> FilteredLinks = new List<string>();
    List<string> Respones = new List<string>();
    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);
        }

        for (int i = 0; i < FilteredLinks.Count; i++)
        {
            contents.Encoding = System.Text.Encoding.GetEncoding(1255);
            cont = contents.DownloadString(FilteredLinks[i]);
            GetResponsers(cont);
        }
    }

    private void GetResponsers(string contents)
    {
        int f = 0;
        int startPos = 0;

        while (true)
        {
            string firstTag = "<FONT CLASS='text16b'>";
            string lastTag = "&n";

            f = contents.IndexOf(firstTag, startPos);
            if (f == -1)
            {
                break;
            }

            int g = contents.IndexOf(lastTag, f);
            startPos = g + lastTag.Length;
            string responser = contents.Substring(f + firstTag.Length, g - f - firstTag.Length);

            foreach (List<string> subList in Threads)
            {                
            }
        }   
    }
}

我创建了这个变量:

List<List<string>> Threads = new List<List<string>>();

我还不知道如何做的第一件事是如何根据Links方法中的FilteredLinks.Count创建内部线程数量的列表。

第二件事是我做的GetResponsers方法:

foreach (List<string> subList in Threads)
{
}

但我想要的是它第一次将变量响应者的所有值添加到线程中的第一个List。然后当它到达休息时间;然后停止然后在Links方法中调用它GetResponsers(cont);这次我希望将响应者中的所有值添加到线程中的第二个列表中。

我知道每次进入休息时间;它将从FilteredLinks获得下一个FilteredLink

  1. 如何根据FilteredLinks.Count创建主题列表中的数量?

  2. 如何在GetResponsers中创建代码以添加响应者?

2 个答案:

答案 0 :(得分:0)

  

如何制作列表清单?然后添加到每个List值?

以下codesnippet演示了如何处理List<List<string>>

List<List<string>> threads = new List<List<string>>();
List<string> list1 = new List<string>();
list1.Add("List1_1");
list1.Add("List1_2")
threads.Add(list1);

List<string> list2 = new List<string>();
list1.Add("List2_1");
list1.Add("List2_2")
list1.Add("List2_3")
threads.Add(list2);
  
      
  1. 如何根据线程在线程中创建列表数量   FilteredLinks.Count?
  2.   
for(int i = 0; i < FilteredLinks.Count; i++)
{
  var newList = new List<string>();
  newList.Add("item1"); //add whatever you wish, here.
  newList.Add("item2");
  Threads.Add(newList);
}

我担心我无法帮助你处理问题#2,因为我不明白你在那里想要达到的目的。

答案 1 :(得分:0)

  1. 您不需要在Threads中指定列表数量的计数,因为它是一个列表,您只需继续向其添加列表即可。因此,第一部分在您宣布它的地方是正确的。
  2. 第二部分 - &gt;你的通话方法会改变。请看下面的调用方法。
  3. 第三部分 - &gt;将private void GetResponsers(字符串内容)更改为private void GetResponsers(List threadList,string contents)。请参阅下面的实施变更。
  4. 此外,循环将如下所示

            //other code you have    
            List<List<string>> Threads = new List<List<string>>();
    
            public void Links(string FileName)
            {
    
          // ...other code you have
           for (int i = 0; i < FilteredLinks.Count; i++)
                {  
                   threads.Add(new List<string>);
                    contents.Encoding = System.Text.Encoding.GetEncoding(1255);
                    cont = contents.DownloadString(FilteredLinks[i]);
                    GetResponsers(threads[threads.Count - 1], cont);
                }
            }
    
         private void GetResponsers(List<string> threadList, string contents)
                    {
                        int f = 0;
                        int startPos = 0;
                        while (true)
                        {
                            string firstTag = "<FONT CLASS='text16b'>";
                            string lastTag = "&n";
                            f = contents.IndexOf(firstTag, startPos);
                            if (f == -1)
                            {
                                break;
                            }
                            int g = contents.IndexOf(lastTag, f);
                            startPos = g + lastTag.Length;
                            string responser = contents.Substring(f + firstTag.Length, g - f - firstTag.Length);
                            threadList.Add(responser);    
                        }   
                    }
    

    PS:请原谅格式化。