初期化コードの方が前に書かれてないといけない様子。
コンパイラの盲点?
テストコード
static void Main()
{
int x;
string s = "10";
validate(ref x, int.TryParse(s, out x));
//TryParseが先に呼ばれてxは初期化されるはずだが・・・
//「エラー CS0165 未割り当てのローカル変数 'x' が使用されました。」
Console.WriteLine(x);
}
//Parse成功なら範囲チェック、失敗ならデフォルト値をセット
private static void validate(ref int x, bool parseResult)
{
int min = 1, max = 1000, defaultVal = 100;
x = !parseResult ? defaultVal
: x < min ? min
: max < x ? max
: x;
}
//逆順だと通る
private static void validate(bool parseResult, ref int x)
{
validate(ref x, parseResult);
}