1

私はこの方法を持っています:

public static void Add(int _Serial, string _Name, long? _number1, long? _number2)
{
    // ...
}

send date to メソッドに次のコードを使用します。

long? _num1;
long? _num2;
if (txtNumber1.Text != null && txtNumber1.Text != "")
{
    _num1= long.Parse(txtNumber1.Text);
}
if (txtNumber2.Text != null && txtNumber2.Text != "")
{
    _num2= long.Parse(txtNumber2.Text);
}
Add(22, "Kati", _num1, _num2)

しかし、エラー_num1&_num2Add(...)

エラー:

割り当てられていないローカル変数 '_num1' の使用

割り当てられていないローカル変数 '_num2' の使用

4

3 に答える 3

5

コンパイラーは、これらのifステートメントが実行されるかどうかを認識しないため、最悪のシナリオを考慮し、Addで使用される前に一方または両方の変数が初期化されない可能性があることを認識します。

解決策は、次のように、宣言時にそれらを初期化することです。

long? _num1 = null;
long? _num2 = null;
于 2012-07-14T14:49:09.930 に答える
1

はい、使用する前にローカル変数を初期化する必要があります。ただし、この場合、これらの変数を削除できます (以下のリファクタリングを参照)。

ボックスには素敵な方法String.IsNullOrEmptyがあります。""これを使用して、文字列に値またはが含まれているかどうかを確認できますnull。また、nullable の解析を別のメソッドに移動しました。

private long? ParseNullableLong(string s)
{
    return String.IsNullOrEmpty(s) ? null : (long?)Int64.Parse(s);
}

次に、UI から値を取得するための 2 つのプロパティを宣言します (もちろん、より適切な名前を検討してください)。

private long? Number1
{
    get { return ParseNullableLong(txtNumber1.Text); }
}

private long? Number2
{
    get { return ParseNullableLong(txtNumber2.Text); }
}

これで、すべてのコードは次のようになります。

Add(22, "Kati", Number1, Number2);
于 2012-07-14T15:59:59.703 に答える
0

Kendall Frey があなたの質問に答えます。ここで、数値を解析するための別のアプローチを提案したいと思います。

long? _num1 = null;
long result;

if (Int64.TryParse(txtNumber1.Text, out result)) {
    _num1 = result;
}

TryParseテキストがnull、空、または数値ではない場合でも、例外をスローしないため、これはより簡単で安全です。

于 2012-07-14T15:31:33.073 に答える