如何将字符串列表中的IP地址转换为IP.Net.IPAddress(附MySQL取IP代码)
问题:将字符串列表中的IP地址转换为IPAddress类型?
我已经通过以下C#代码从MySQL数据库读取了IP地址到字符串列表AAServerAddressList中:
public void GetServerList() { //创建Sql连接 MySqlConnection con = new MySqlConnection(cs); con.Open(); MySqlCommand cmd = new MySqlCommand("Select * from servers", con); //创建数据阅读器并执行命令 MySqlDataReader dataReader = cmd.ExecuteReader(); //读取数据并存储到列表中 while (dataReader.Read()) { AAServerAddressList.Add(dataReader["Server_IP"] + ""); } }
现在想请教如何将这个字符串列表中的IP地址转换为System.Net.IPAddress类型?
解决方案
你可以通过IPAddress.TryParse或者IPAddress.Parse方法完成转换,这里更推荐用TryParse——它能处理无效IP的情况,避免程序因格式错误抛出异常。
方法一:转换现有字符串列表
如果想基于已有的AAServerAddressList生成一个新的List<IPAddress>,可以这么写:
// 假设AAServerAddressList是List<string>类型 List<IPAddress> ipAddressList = new List<IPAddress>(); foreach (string ipStr in AAServerAddressList) { if (IPAddress.TryParse(ipStr, out IPAddress ipAddr)) { ipAddressList.Add(ipAddr); } else { // 这里可以处理无效IP,比如打印日志或直接跳过 Console.WriteLine($"检测到无效IP地址:{ipStr}"); } }
方法二:读取数据库时直接转换
其实你也可以在读取数据的阶段就直接转换成IPAddress,省去先存字符串再转换的步骤,效率更高:
// 修改GetServerList方法,假设现在有一个List<IPAddress>类型的IPAddressList public void GetServerList() { MySqlConnection con = new MySqlConnection(cs); con.Open(); MySqlCommand cmd = new MySqlCommand("Select * from servers", con); MySqlDataReader dataReader = cmd.ExecuteReader(); while (dataReader.Read()) { string ipStr = dataReader["Server_IP"].ToString(); if (IPAddress.TryParse(ipStr, out IPAddress ipAddr)) { IPAddressList.Add(ipAddr); } else { // 处理数据库中的无效IP Console.WriteLine($"数据库中存在无效IP:{ipStr}"); } } // 记得关闭资源 dataReader.Close(); con.Close(); }
注意事项
IPAddress.Parse会在遇到无效IP时抛出FormatException,如果能确保所有IP格式都正确,可以用这个方法,但生产环境更推荐容错性更强的TryParse。- 要确保代码文件顶部引用了
System.Net命名空间,否则无法使用IPAddress类。
内容的提问来源于stack exchange,提问作者LEEFFM
相关产品推荐
相关产品推荐

