usan tipo ser referencia que parametro para multiple method las generico genericas generic debe dato clases argumentos c# generics nullable reference-type generic-constraints

c# - tipo - para que se usan las clases genericas



¿Por qué Nullable<T> no coincide como un tipo de referencia para restricciones genéricas (1)

Posible duplicado:
Tipo de Nullable como un parámetro genérico posible?

Encontré algo muy extraño con restricciones de tipo genérico. Tengo una clase como esta:

public SomeClass<T> where T:class { }

Sin embargo, he descubierto que no puedo usar tipos anulables como esperaba:

new SomeClass<int?>();

Me sale un error que int? debe ser un tipo de referencia. ¿Es Nullable realmente solo una estructura con azúcar sintáctica para que se vea como un tipo de referencia?


Nullable<T> es una struct (consulte MSDN ), sin embargo, es la única struct que no cumple con la restricción de struct . Por lo tanto, no puede usar un Nullable como un parámetro de tipo genérico cuando se usan las restricciones de class o struct .

Nullable<T> no es solo una estructura con algo de azúcar sintética. Tiene un soporte especial en el CLR para algunos de sus comportamientos. Por ejemplo, tiene un comportamiento especial de boxeo. Específicamente, un nullable nunca se encajona. El valor subyacente está encuadrado. Si el valor nulo es el valor nulo (HasValue es falso), se convierte en una referencia nula. Además, los operadores de conversión para cualquier Nullable<T> a Nullable<U> se Nullable<U> de las conversiones de T a U Estas son características que no podría implementar usted mismo en .NET 1.0 / 1.1.