【问题标题】:IP address exception when adding to a list in C#在 C# 中添加到列表时出现 IP 地址异常
【发布时间】:2014-05-03 20:46:00
【问题描述】:

我正在尝试从文本文件中读取一组 IP 并将其添加到 IPAddress 类型列表中。在“listIPAdrrs.Add(IPAddress.Parse(list[i]));”行引发了一个异常

例外是

指定的 IP 地址无效。

      List<string> list = new List<string>();
        string text = System.IO.File.ReadAllText(@"D:\ips.txt");

        String[] str = text.Split('\n');

        for (int j = 0; j < str.Length; j++)
        {
            list.Add(str[j]);
        }

        List<IPAddress> listIPAdrrs = new List<IPAddress>();

        for (int i = 0; i < list.Count; i++)
        {
             //Console.WriteLine(list[i]);

            listIPAdrrs.Add(IPAddress.Parse(list[i]));
        }

【问题讨论】:

  • 异常似乎很简单——你提供了哪些不良数据IPAddress.Parse
  • 好吧,我会冒险猜测在抛出异常时该字符串不是循环中的有效 IP 地址! IPAddress 上是否有 TryParse 方法?甚至不知道那是整箱。
  • 考虑改用File.ReadAllLines,这样可以节省拆分和循环:List&lt;string&gt; list = new List&lt;string&gt;(System.IO.File.ReadAllLines(@"D:\ips.txt"));
  • 如果不把ips.txt的内容也贴出来,实在是没办法确定这里的问题。
  • 其他人已经告诉你大利出了什么问题。我最好的猜测是你的文件末尾有一个空行,这导致一个空字符串被传递给你的 parse 方法。 Try parse 可以很好地解决这个问题,尽管您可能会在解析之前显式检查空字符串,以便您可以将这种情况作为简单的跳过来处理,而不是您可能想要以不同方式处理的真正糟糕的文本行。跨度>

标签: c# list ip-address


【解决方案1】:

您试图添加一个不是 IP 地址的值。

我建议使用TryParse。然后,如果函数返回 false,您就知道有一个无效值,您可以显示一条显示无效值的消息。

【讨论】:

    【解决方案2】:

    问题在于行尾不一定只是 \n(在 Windows 上,很可能是 \r\n),并且后跟 \r 字符的 IP 地址不会被 @ 视为有效 IP 地址987654324@.

    幸运的是,制作 CLR 的人深思熟虑并得到了一些非常健壮的代码,因此我们将改用 File.ReadAllLines

    List<string> list = new List<string>(System.IO.File.ReadAllLines(@"D:\ips.txt"));
    List<IPAddress> listIPAdrrs = new List<IPAddress>();
    
    for (int i = 0; i < list.Count; i++)
    {
        //Console.WriteLine(list[i]);
        listIPAdrrs.Add(IPAddress.Parse(list[i]));
    }
    

    如果这是你的喜好,你也可以使用 LINQ 来让它更短(尽管你失去了使用 TryParse 的能力):

    List<IPAddress> listIPAdrrs = System.IO.File.ReadAllLines(@"D:\ips.txt")
        .Select(line => IPAddress.Parse(line))
        .ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 2019-01-29
      • 1970-01-01
      • 2013-11-16
      • 2013-11-05
      • 1970-01-01
      相关资源
      最近更新 更多