if (myVariable == null)
[1]値型では機能しません。(参照型と値型 の
簡単な紹介については、以下を参照してください 。)
struct
値の型は主にstruct
s (例: DateTime
) であり、[2]やerationsなどの単純な型が含まれます。値型は(本質的に) 値をサポートしません。int
enum
null
これに対する例外と修正は、null 許容null
型です。基本的に、これらは構造体型の可能な値に追加されます。Maybe<T>
これらは、他の言語で知っているものと構造的に同じです[3]。のシンタックスシュガーであるValueType?
(eg ) を使用してそれらを作成します。int?
Nullable<ValueType>
または、null 許容型を使用する代わりに、変数をその型のデフォルト値と比較できます。
if (Object.Equals(myVariable, default(MyVariableType)))
(これは、参照型 (オブジェクト) と値型の両方で機能します。)手動で
置換する必要があることに注意してください。MyVariableType
残念ながら、置換することはできません。
if (Object.Equals(myVariable, default(myVariable.GetType())))
default()
型名のみを直接受け入れるためです。(コンパイル時に評価されると思います。)
一言で言えば構造体
簡単に言えば、構造体はカットダウン クラスです。継承やファイナライザーをサポートしないクラスを想像してみてください。そして、削減されたバージョンである構造体があります。構造体はクラスと同じ方法で定義され (struct
キーワードを使用する場合を除く)、前述の制限を除けば、構造体はフィールド、メソッド、プロパティ、演算子など、同じ豊富なメンバーを持つことができます。
[引用: http://www.albahari.com/valuevsreftypes.aspx ]
クラスは参照型です。クラス変数 (より具体的には、そのメモリ領域) には、実際のオブジェクト インスタンス データが格納されている他のメモリ領域へのポインタのみが含まれます。
値型変数にはデータが直接含まれます。これにより、キャッシュの局所性とルックアップの保存により、速度が向上する場合があります。しかし、より複雑な構造体の場合、パフォーマンスに悪影響を与える可能性もあります。
脚注:
[1] エラーすら出ません。デフォルト以外の値 (ゼロ (等価) またはゼロとs の構造体)で初期化されるため、myVariable == null
常に yieldになります。このデフォルト値は で使用できます。false
myVariable
null
null
default(Type)
[2] 技術的には、単純型 (とを除くすべての組み込み型)は構造体です。補足: 組み込みの型は、System名前空間の型のエイリアスです。string
object
[3] 例えばHaskell で。C#Maybe<T>
では組み込みではありませんが、実装できます。クラスと構造体の両方に対してNothing
、より明示的/自己文書化されたバージョンとして提供されます。null
[4] [ 4] はありません。いいえ、実際に行って確認できます。