一般に、null
値を持つオブジェクトのプロパティにアクセスすると、null
例外が発生します。しかし、HasValue
のプロパティNullable
object
にアクセスすると結果が得られます。私は何がsceenの後ろに実装されるのか知りたいです。(Nullable型).HasValueの背後の実装
答えて
既に知られていない場合は、int?
のようなヌル入力可能なタイプは、ちょうどNullable<int>
です。
C#でのヌル可能な型は単なる「構文的な砂糖」です。コンパイル時に、コンパイラはint?
とdouble?
とbool?
をすべてNullable<int>
,Nullable<double>
およびNullable<bool>
に置き換えます。
Nullable<T>
は、実際には構造体です。技術的には決してnullにはなりません!ヌル可能な型にnullを割り当てることができる理由は、もう一つの構文的な砂糖です。ヌル可能な型にnullを代入すると、HasValue
プロパティがfalseに設定されます。 null以外の値を代入すると、HasValue
が再びtrueに設定され、基になる値が設定している値に設定されます。
nullable型の仕組みについて簡単に説明します。今すぐ戻ってあなたの質問に:私たちはHashValue
にアクセスするときに我々はのNullableオブジェクトのhasValueはプロパティにアクセスするとき
しかし、それは結果に
を与えるだろう、私はあなたが
を意味すると思います。しかしたとえ変数が
null
であっても、int?
のプロパティは例外をスローしません!どうして?
前に述べたように、Nullable<T>
は構造体なので決してnullにはなりません。そのため、HasValue
プロパティにアクセスして例外をスローすることはできません。
"なぜ、null可能なオブジェクトのValue
プロパティにアクセスすると例外がスローされるのですか?"あなたは尋ねるかもしれない。
これは、Nullable<T>
構造体の実装のためです。あなたがhereを見ることができるように:
public T Value {
get {
if (!hasValue) {
ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_NoValue);
}
return value;
}
}
それはもしhasValue
が真であることを確認します。 falseの場合は例外をスローします。
だからだ。
- 1. VB.NET - HasValue = FalseでNullable(Of T)を作成する
- 2. VB.NETのNullable型?
- 3. Nullable <>型はBCL、CLR、またはその両方の実装ですか?
- 4. のNullable型は2.2
- 5. C#のプリミティブ型/ Nullable型の型名
- 6. DataGridCheckBoxColumnをNullable <DateTime> .HasValueにバインドすることはできますか?
- 7. オイラーのピー関数の実装の背後にある
- 8. のNullable列挙型(??)とLinqToSQL
- 9. Nullable型をNullable型に変換しないでください。
- 10. Web api owin認証の背後にIDサーバーを実装する
- 11. nullの型と.HasValueはまだNull例外をスローします
- 12. C#HasValue vs!= null
- 13. ボトムスライド型ドロワーの実装
- 14. Nullable型のヌル参照でランタイムバインディングを実行できません
- 15. Nullable型の配列への追加
- 16. String型のnullable scala.matcherrorの一部(null)
- 17. _shuffleのこの実装の背後にあるロジックは何ですか?
- 18. インターフェイスの型メソッドのパラメータの実装
- 19. C++での多型の実装
- 20. javaのフローチャート型ワークフローの実装
- 21. 複数のUITableViewCell型の実装
- 22. イベントシステムの型付きの実装
- 23. OCaml、Scala、Goの構造型の実装
- 24. noSQL実装:スレッド型メッセージングシステム
- 25. DTCoreTextエラーメッセージ実装後
- 26. 実装データ型の値が無効
- 27. プリミティブ型を返すメソッドの再実装
- 28. CPython型の実装について
- 29. toStringの型署名を実装する
- 30. LINQを使用してNullable値の並べ替え規則を実装する
.NETソースは[利用可能なオンライン](http://referencesource.microsoft.com/#mscorlib/system/nullable.cs,ffebe438fd9cbf0e)です。 –