Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, nikov, Вы писали:
А>>> С любой структурой можно сделать fixed, указатели, арифметику.
N>>Не с любой, только с unmanaged.
А>Так в чем же суть этих ограничений?
unmanaged структура должна состоять только из
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, or bool.
Any enum-type.
Any pointer-type.
Any user-defined struct-type that is not a constructed type and contains fields of unmanaged-types only.
Соответственно, ограничение where T: struct, не дает гарантии, что T:
unsafe struct
Что касается причины такого ограничения, то она тоже приведена в спецификации
[ш]
Unlike references (values of reference types), pointers are not tracked by the garbage collector—the garbage collector has no knowledge of pointers and the data to which they point. For this reason a pointer is not permitted to point to a reference or to a struct that contains references, and the referent type of a pointer must be an unmanaged-type.
[/ш]
C# почему-то не умеет, даже если указывать where T : struct. Проблема уже решена другим путём, а вот вопрос — почему не умеет — остался. С любой структурой можно сделать fixed, указатели, арифметику. А с генерик структурой нельзя...