0

質問のタイトルは自明ではないかもしれないので、先に進んで詳しく説明しましょう。

数値のみを受け入れるか、空のままにしておくTextBoxを考えてみましょう。入力された値 (テキスト) は、整数 ( int32 ) 変数に格納されます。ユーザーが数字の 0 を入力するか、 TextBoxを空のままにしておくと、文字列から int への変換で空の文字列も "0" に変換されるため、問題が発生します。

私の質問は次のとおりです。2 つのシナリオを区別するにはどうすればよいですか?

編集私は多くの質問がコードと正確な問題によって答えられるかもしれないと考えました(私が見ているように)

    if (txtOtherId.Text == string.Empty)
    {
        otherId = Convert.ToInt32(null);
    }
    else
    {
        otherId = Convert.ToInt32(txtOtherId.Text);
    }
4

5 に答える 5

2

拡張メソッドはどうですか?

public static class Extensions
{
  public static bool TryGetInt(this TextBox tb, out int value)
  {
    int i;
    bool parsed = int.TryParse(tb.Text, out i);
    value = i;

    return parsed;
  }
}  

使用法:

int i;

if (textBox1.TryGetInt(out i))
{
    MessageBox.Show(i.ToString());
}
else
{
    // no integer entered
}
于 2012-11-15T09:03:18.923 に答える
1

何を試しましたか?あなたのコードを見ることができますか?

今、は次のことを試しました:

int i;
i = Convert.ToInt32("");  // throws, doesn't give zero
i = int.Parse("");         // throws, doesn't give zero
bool couldParse = int.TryParse("", out i);   // makes i=0 but signals that the parse failed

だから再現できない。ただし、のnull代わりにを使用すると""、 はConvert.ToInt32ゼロ ( ) に変換されます0。ただし、ParseそれでもTryParse失敗しnullます。

アップデート:

あなたのコードを見たので。otherIdfromの型を疑問符でnull 許容int型にする場所に変更することを検討してください。それで:int?

if (txtOtherId.Text == "")
{
    otherId = null;  // that's null of type int?
}
else
{
    otherId = Convert.ToInt32(txtOtherId.Text);   // will throw if Text is (empty again or) invalid
}

例外が発生しないことを確認したい場合は、次のようにします。

int tmp; // temporary variable
if (int.TryParse(txtOtherId.Text, out tmp))
    otherId = tmp;
else
    otherId = null;   // that's null of type int?; happens for all invalid input
于 2012-11-15T09:18:33.290 に答える
1

nullable intを使用してから、空白の文字列を null にすることができます。

int? myValue = String.IsNullOrEmpty(myTextbox.Text) 
        ? (int?)null 
        : int.Parse(myTextbox.Text);

明確にするために、上記は次と同等です

int? myValue = null;
if(!String.IsNullOrEmpty(myTextbox.Text))
{
    myValue = int.Parse(myTextbox.Text);
}
于 2012-11-15T09:01:10.850 に答える
0

それが実際にテキストボックスであると仮定すると...

string result = myTextBox.Text;

if (string.IsNullOrEmpty(result))
    // This is an empty textbox
else
    // It has a number in it.
    int i = int.Parse(result);
于 2012-11-15T09:01:36.060 に答える
0

それを行うには、2 つの簡単な方法があります。

string inputText="";

int? i=null;
if (!string.IsNullOrWhiteSpace(inputText))
i = int.Parse(inputText);

int i2;
bool ok = int.TryParse(inputText, out i2);
于 2012-11-15T09:05:31.060 に答える