1

私は次のコードを持っています -

int lat = System.Convert.ToInt16(latTextBox1.Text);

これは、変更されたイベントで発生しています。

しかし、私のコードはこの行で壊れています -

Input string was not in a correct format.

ここでlatTextBox1.Text=""は空の文字列です。空の文字列をnull値に変換できないため、これは壊れていると思います。

null 値を考慮してコードを変更するにはどうすればよいですか?

4

9 に答える 9

4

OK、コメントに基づいて使用できます:

int? lat = string.IsNullOrEmpty(latTextBox1.Text) 
               ? (int?)null : Convert.ToInt32(latTextBox1.Text);

int?null 許容の int です。

于 2013-02-04T14:31:22.113 に答える
3

簡単な方法はどうですか:

int? lat = null;
int dummyLat;
if (Int32.TryParse(latTextBox1.Text, out dummyLat)
    lat = dummyLat;

余談ですが、イベントで文字列
を変換したことはありません。TextChangedなんで?キーを押すたびにイベントをトリガーするためです。他のトリガーを使用して変換を開始します (ボタンなど)。

于 2013-02-04T14:31:40.600 に答える
3

まあ、空の文字列をnull値に変換することを意図Convert.ToInt16したものではありません...実際、戻り値の型がnull不可(別名)であるため、変換できません。Int16short

私はあなたが実際にもっと好きなものを望んでいると思います:

int lat;
if (int.TryParse(latTextBox1.Text, out lat))
{
    // Use lat
}
else
{
    // Invalid or empty input. Handle appropriately.
}

空の文字列を無効な入力とは異なる方法で処理したい場合は、明示的に行う必要がありますが、「単なる空白」が「空」または「無効」と同等かどうかも考慮する必要があります。

于 2013-02-04T14:31:35.530 に答える
1

整数に変換する前に、まず現在の値が空でないことを確認する必要があります。次のスニペット int lat = 0; を確認してください。

  If(! string.IsNullorEmpty(latTextBox1.Text))
    {
     lat = System.Convert.ToInt32(latTextBox1.Text);
    }
// use your lat variable here

アップデート:

上記のコメントから、値latを保持する可能性があるNULLため、値をNULLに保持するには、null可能なIntにする必要があります

この更新されたコード スニペット int を考慮しますか? 緯度 = 0;

  If(! string.IsNullorEmpty(latTextBox1.Text))
    {
     lat.value = System.Convert.ToInt32(latTextBox1.Text);
    }
// use your lat variable here by accessing the lat.value property

注: 精度を維持するために、緯度と経度の値はdoubleデータ型で格納する必要があります。

于 2013-02-04T14:30:47.927 に答える
1

次の方法を使用できます。

Int16.TryParse:

または、ロジックを実行する前に、文字列が null または空でないかどうかを確認できます。

if (!string.IsNullOrEmpty(latTextBox1.Text)) {
     lat = System.Convert.ToInt16(latTextBox1.Text);
}

http://msdn.microsoft.com/en-us/library/system.int16.tryparse.aspx

于 2013-02-04T14:31:19.790 に答える
0
int i = 0;

if (!Int32.TryParse(latTextBox1.Text, out i)) {

    i = 0; // or default value;
}
于 2013-02-04T14:33:02.610 に答える
0
int lat = 0;

if (Int32.TryParse(laTextBox1.Text, out lat))
{
    //success, textbox contained an int, now lat has the value of that int
}
else
{
    //failure, textbox did not contain an int
}
于 2013-02-04T14:31:06.467 に答える
0

設定されている文字列を確認する必要があります。

int lat = 0;
if (string.IsNullOrEmpty(latTextBox1.Text)
{
    // Your null case here
}
else
{
    lat = System.Convert.ToInt16(latTextBox1.Text);
}

けれど:

int lat = 0;
if (!Int32.TryParse(latTextBox1.Text, out lat)
{
    // Error handling here
}

数値以外の入力に対処するため、おそらくより良いアプローチです。

于 2013-02-04T14:31:14.953 に答える
-1

一発ギャグ:

int lat = System.Convert.ToInt16(latTextBox1.Text.Length == 0 ? 0 : latTextBox1.Text);

基本的に合体のように機能します。latTextBox1.Text に値がない場合はゼロに設定し、そうでない場合は latTextBox1.Text の値に設定します。

于 2013-02-04T14:33:40.343 に答える