未处理的& # 39;FormatException& # 39;拆分IP字节时的异常
本文关键字:异常 字节 拆分 未处理 FormatException IP | 更新日期: 2023-09-27 18:14:47
我试图从用户输入的IP地址中分离八位元组,然后将这些八位元组放入文本文档中。问题是,我得到一个"FormatException未处理"的警告。我是编程新手,所以我不太确定如何解决这个问题。
下面是用户输入的示例:123.456.789
下面是我的代码:
string fwrEdcgIp;
fwrEdcgIp = EDCGIPAddressFwrTxt.Text;
//Separate out EDCG IP Foreward octet
string[] edipf = fwrEdcgIp.Split('.');
int fwrEdcgIp1 = Int32.Parse(edipf[0]);
int fwrEdcgIp2 = Int32.Parse(edipf[1]);
int fwrEdcgIp3 = Int32.Parse(edipf[2]);
int fwrEdcgIp4 = Int32.Parse(edipf[3]);
如何使用真正的IP地址解析器(System.Net.IPAddress)?
IPAddress ipAddr;
bool ok = IPAddress.TryParse(EDCGIPAddressFwrTxt.Text, out ipAddr);
if (ok)
{
byte[] bytes = ipAddr.GetAddressBytes();
}
很可能edipf
中的某个字符串不是有效的整数。也许用户输入了错误的内容。当抛出异常时,应该给你'break'选项,并查看导致问题的行,看看问题是什么。如果edipf[x]
是畸形的,那么这是你的问题。
我将使用try/catch
块捕获此异常并通知用户输入正确的格式。(实际上我会使用I4V的解决方案,如果!ok
,通知用户用户提供的不正确格式,但知道这一点仍然很重要。)
string fwrEdcgIp;
fwrEdcgIp = EDCGIPAddressFwrTxt.Text;
//Separate out EDCG IP Foreward octet
string[] edipf = fwrEdcgIp.Split('.');
try {
int fwrEdcgIp1 = Int32.Parse(edipf[0]);
int fwrEdcgIp2 = Int32.Parse(edipf[1]);
int fwrEdcgIp3 = Int32.Parse(edipf[2]);
int fwrEdcgIp4 = Int32.Parse(edipf[3]);
} catch (FormatException) {
MessageBox.Show("Please input IP address in the format "123.123.123.123");
}
根据设计,如果输入不是有效整数,Int32.Parse
将抛出FormatException
。它还能做什么?
使用Int32.TryParse
代替用户输入。
使用TryParse。
int num;
bool result = Int32.TryParse(value, out num);
if(result){
// do something.
}