- Почему я не могу использовать ограничение
where T : System.ValueType
? - Почему Microsoft предотвращает ограничение этого типа ?
Пример:Почему я не могу использовать System.ValueType в качестве ограничения generics?
Почему я не могу сделать следующее?
// 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); }
В чем разница в использовании структуры над ValueType?
// Defined in my class
public void foo<T>(T a) where T : struct
{ bar<T>(a); }
Должен сказать, я всегда задавался вопросом, что мы не можем ограничивать их, как 'where T: struct, System.Enum'. Было бы так полезно! –
Вы _can_ на самом деле делаете 'где T: Enum' и' where T: ValueType' в F # (используя свой синтаксис 'когда 'T:> Enum'), и действительно, он работает, поскольку Джон ожидает, что он сработает. Для ограничения типа enum он работает с общими перечислениями, такими как 'enum' и 'System.Enum' и правильно запрещает синонимичные типы значений, такие как 'byte' или' int'. Чтобы ответить на вопрос Джона о том, «почему» так сложно добавить в C#, см. Это обсуждение Roslyn: https://github.com/dotnet/roslyn/issues/262 –
Abel