私が持っていると仮定します:
public class Bob
{
public int Value { get; set; }
}
Valueメンバーを次のような出力パラメーターとして渡したい
Int32.TryParse("123", out bob.Value);
しかし、コンパイルエラーが発生します。"'out'引数は変数として分類されません。"これを達成する方法はありますか、または変数を抽出する必要があります。
int value;
Int32.TryParse("123", out value);
bob.Value = value;
自動実装プロパティではなく、フィールドと「通常」プロパティを明示的に使用する必要があります。
public class Bob
{
private int value;
public int Value
{
get { return value; }
set { this.value = value; }
}
}
次に、出力パラメータとしてfieldを渡すことができます。
Int32.TryParse("123", out bob.value);
しかし、もちろん、それは同じクラス内でのみ機能します。フィールドはプライベートであるためです(そうすべきです!)。
プロパティではこれができません。 VBでcanプロパティを参照渡しするか、出力パラメータとして使用する場合でも、基本的に余分な一時変数があります。
TryParse
の戻り値を気にしない場合は、いつでも独自のヘルパーメソッドを作成できます。
static int ParseOrDefault(string text)
{
int tmp;
int.TryParse(text, out tmp);
return tmp;
}
次に使用します:
bob.Value = Int32Helper.ParseOrDefault("123");
これにより、複数の場所でこれを行う必要がある場合でも、単一の一時変数を使用できます。
これは達成できますが、プロパティを使用することはできません。
public class Bob {
public int Value { get; set; } // This is a property
public int AnotherValue; // This is a field
}
out
ではValue
を使用できませんが、AnotherValue
では使用できます。
これは動作します
Int32.TryParse("123", out bob.AnotherValue);
ただし、一般的なガイドラインでは、クラスフィールドを公開しないように指示されています。したがって、一時変数のアプローチを使用する必要があります。