0

ユーザーが入力した IP アドレスからオクテットを分割し、それらのオクテットをテキスト ドキュメントに配置しようとしています。問題は、「FormatException was unhandled」という警告が表示されることです。私はプログラミングが初めてなので、これに取り組む方法がよくわかりません。

ユーザー入力の例を次に示します。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]);
4

4 に答える 4

4

実際の IP アドレス パーサー (System.Net.IPAddress) を使用するのはどうですか?

IPAddress ipAddr;
bool ok = IPAddress.TryParse(EDCGIPAddressFwrTxt.Text, out ipAddr);
if (ok)
{
    byte[] bytes = ipAddr.GetAddressBytes();
}
于 2013-05-22T18:24:37.290 に答える
1

の文字列の 1 つがedipf有効な整数ではない可能性があります。ユーザーが何かを間違って入力した可能性があります。例外がスローされたら、「ブレーク」して問題の原因となっている行を調べ、問題の内容を確認するオプションが与えられる必要があります。の形式が正しくない場合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");
}
于 2013-05-22T18:30:08.343 に答える
1

設計上、入力が有効な整数でない場合はInt32.Parseをスローします。FormatException他に何ができるでしょうか?

Int32.TryParseユーザー入力の代わりに使用します。

于 2013-05-22T18:22:16.053 に答える
0

そのようにTryParseを使用してください。

int num;
bool result = Int32.TryParse(value, out num);
if(result){
   // do something.
}
于 2013-05-22T18:23:46.750 に答える