19

重複の可能性:
ジェネリックパラメーターとしてnull許容型は可能ですか?

ジェネリック型の制約がある非常に奇妙なことに遭遇しました。私はこのようなクラスを持っています:

public SomeClass<T> where T:class
{
}

ただし、期待どおりにnull許容型を使用できないことがわかりました。

new SomeClass<int?>();

int?参照型でなければならないエラーが発生します。Nullableは、実際には、参照型のように見えるようにするためのシンタックスシュガーを使用した構造体ですか?

4

1 に答える 1

22

Nullable<T>structMSDNを参照)ですが、制約structを満たさないのはそれだけです。したがって、または制約のいずれかが使用されている場合、をジェネリック型パラメーターとしてstruct使用することはできません。Nullableclassstruct

Nullable<T>糖衣構文を含む単なる構造体ではありません。CLRでは、その動作の一部について特別なサポートがあります。たとえば、特別なボクシングの動作があります。具体的には、null許容型がボックス化されることはありません。基になる値はボックスで囲まれています。nullableがnull値(HasValueがfalse)の場合、null参照に変換されます。Nullable<T>また、任意のtoの変換演算子は、からへNullable<U>の変換から解除されます。これらは、.NET 1.0/1.1では自分で実装できない機能です。TU

于 2012-12-10T03:52:49.817 に答える