- Perché non è possibile utilizzare un vincolo di
where T : System.ValueType
? - Perché Microsoft impedisce a questo tipo di di essere un vincolo?
Esempio:Perché non posso utilizzare System.ValueType come un vincolo generico?
Perché non posso effettuare le seguenti operazioni?
// 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); }
Qual è la differenza nell'uso di struct sopra ValueType?
// Defined in my class
public void foo<T>(T a) where T : struct
{ bar<T>(a); }
Devo dire che mi sono sempre meravigliato di non poterli limitare come 'where T: struct, System.Enum'. Sarebbe * così utile * a volte! –
Si _can_ effettivamente 'dove T: Enum' e' dove T: ValueType' in F # (usando la sua sintassi 'quando 'T:> Enum') e in effetti, funziona come Jon si aspetta che funzioni. Per il vincolo enum-type, funziona con enumerici generici come 'enum' e 'Sistema.Enum', e vieta correttamente anche i tipi di valore come 'byte' o' int'. Per rispondere alla domanda di Jon sul "perché" è così difficile da aggiungere a C#, vedi questa discussione su Roslyn: https://github.com/dotnet/roslyn/issues/262 –
Abel