Null許容変数があるとします。
_int? myVar = null;
_
その値を使用したい場合、少なくとも2つのオプションがあります。
明示的なキャスト
_DoSomething((int)myVar);
_
_Nullable<T>
_の_.Value
_プロパティを呼び出す
_DoSomething(myVar.Value);
_
変換が失敗すると、どちらの場合も同じ例外がスローされることに気づきました(_System.InvalidOperationException: Nullable object must have a value
_)。これらは両方とも同じ方法で実装されていると思います(しかし、その主張の証拠は見つかりませんでした)。 。
私の質問は:
更新:
明らかかもしれませんが、この質問に出くわした場合に備えて、明示的なキャストに対する_.Value
_の利点は、誤って誤った型にキャストしようとしないようにすることであると考えるかもしれません。
一方、明示的なキャストは、一部のシナリオでは読みやすい場合があります。たとえば、var value = (int)myVar;
を使用すると、_var value = myVar.Value;
_よりも型を簡単に識別できます
Nullable<T>
のソースをチェックアウトすると、明示的なキャスト演算子がこれを実行することがわかります。
public static explicit operator T(Nullable<T> value) {
return value.Value;
}
そして、そのValue
プロパティが行うこと:
public T Value {
get {
if (!hasValue) {
ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_NoValue);
}
return value;
}
}
つまり、キャストはプロパティを呼び出し、プロパティによって例外がスローされます。したがって、2つのオプションに違いはありません。
スタイルに関しては、私たちは主観になります。どちらも有効であり、どちらも型の設計者によって明示的に許可されています。プロパティオプションを使用することを選択しますが、それは純粋に個人的な選択です。