7

outパラメータがすでに設定されているかどうかを知る方法はありますか?これは私が探しているものの擬似コードです:

public virtual string blabla(long num, out bool bval)
    {
        if (!bval.HasValue)
            {
            //Do some default logic
            bval = defaultValue;
            }

        return blabla2(num, bval);
    }
4

2 に答える 2

12

できません-メソッド内で確実に割り当てられるまで、変数を読み取ることはできません。これは、メソッドの開始時に宣言されているが値が割り当てられていないローカル変数のようなものと考える必要がありますが、戻る前に値を割り当てる必要があります。(例外がスローされた場合は、値を割り当てなくてもかまいません。)

メソッドへの入力として情報を伝達し、情報を伝播するパラメーターが必要な場合は、refの代わりにを使用する必要がありoutます。

詳細については、パラメーターの受け渡しに関する私の記事を参照してください。

于 2012-04-28T18:34:37.560 に答える
2

Jonの優れた答えに加えて、パラメーターをそのままにしておきたいがout、メソッド内のどこかで値が割り当てられているかどうかを確認する必要がある場合は、次のようなローカルのnull許容型を使用できます。

public virtual string blabla(long num, out bool bval)
{
    bool? bvalLocal;

    ... //I'm assuming there is some code here that may or 
        //may not assign bvalLocal?

    // This whole if block may not be needed if the default
    // value is the default for the type (i.e. false) as
    // GetValueOrDefualt() will take care of that (see 
    // second to last line).
    if (!bvalLocal.HasValue)
    {
        //Do some default logic
        bvalLocal = defaultValue;
    }

    bval = bvalLocal.GetValueOrDefault();
    return blabla2(num, bval);
}
于 2012-04-28T18:34:26.217 に答える