2013-12-04 18 views
2

Я хотел бы создать общее ограничение, которое содержит тип, чтобы быть массивом типов значений (структуры), что-то вроде:C# общее ограничение: Массив структур

public class X<T> where T : struct[] 

или, может быть

public class X<T, U> 
    where U : struct 
    where T : U[] 

но это не работает. Кажется, System.Array не может использоваться как ограничение типа.

Так как я могу ограничить общий параметр как массив структур?

Обновлено после первого ответа:

public interface IDeepCopyable<T> 
{ 
    T DeepCopy(T t); 
} 


public class DeepCopyArrayOfValueTypes<T> : IDeepCopyable<T> 
    where T : is an array of value types 
{ 
    T Copy(T t) {...} 
} 
+0

Если бы это было возможно, элементы в массиве не имели бы типа времени компиляции. – SLaks

+0

Это должно быть 'IDeepCopyable где T: IDeepCopyable ' – SLaks

ответ

11

Вам не нужно.

Просто привяжите его к : struct, а затем напишите T[] вместо T при использовании параметра типа.

public class DeepCopyArrayOfValueTypes<T> : IDeepCopyable<T[]> 
    where T : struct 
{ 
    public T[] DeepCopy(T[] t) {...} 
} 
+3

Обратите внимание, что это ограничивает вас массивом * непустых * структур. –

+0

@ Эрик Против, к сожалению, не поддерживается в C#. (в CIL это '.ctor ([mscorlib] System.ValueType)') – IllidanS4

Смежные вопросы