- ¿Por qué no puedo usar una restricción de
where T : System.ValueType
? - ¿Por qué Microsoft evita que este tipo sea una restricción?
Ejemplo:¿Por qué no puedo usar System.ValueType como una restricción de genéricos?
Por qué no puedo hacer lo siguiente?
// Defined in a .Net class
public void bar<T>(T a) where T : ValueType {...}
// Defined in my class
public void foo<T>(T a) where T : ValueType
{ bar<T>(a); }
¿Cuál es la diferencia entre utilizar struct sobre ValueType?
// Defined in my class
public void foo<T>(T a) where T : struct
{ bar<T>(a); }
Tengo que decir que siempre me he preguntado por qué no podemos limitarlos como 'donde T: struct, System.Enum'. ¡Sería * tan útil * a veces! –
En realidad, puede hacer 'donde T: Enum' y' donde T: ValueType' en F # (usando su sintaxis 'cuando 'T:> Enum') y de hecho, funciona como Jon espera que funcione. Para el enum-type-constraint, funciona con enumeraciones genéricas como 'enum' y 'System.Enum', y prohíbe correctamente los tipos de valores como 'byte' o' int'. Para responder la pregunta de Jon al "por qué" es tan difícil agregar a C#, vea esta discusión de Roslyn: https://github.com/dotnet/roslyn/issues/262 –
Abel