2017-02-13 16 views
7

Я определил этот метод:Общий метод и преобразования: как определить, что тип 1 преобразован в тип 2

public static List<T2> ConvertList<T1, T2>(List<T1> param) where T1:class where T2:class 
{ 
    List<T2> result = new List<T2>(); 

    foreach (T1 p in param) 
     result.Add((T2)p); 

    return result; 
} 

Для преобразования списков типа 1 в списках Тип 2.

К сожалению, я забыл , что C# компилятор не может сказать, что на данном этапе T1 является конвертируемым в T2, поэтому он выдает ошибку:

error CS0030: Cannot convert type T1 to T2

может кто-то направить меня, как сделать это про Perly? Мне нужен этот метод только для преобразования списка пользовательского класса в список object, так как в .NET все происходит от object, он должен работать.

В основном то, что я хотел бы ожидать некоторый синтаксис, чтобы сказать компилятору, что T2 (object) является базой для T1 (MyClass), так что-то вроде:

public static List<T2> ConvertList<T1, T2>(List<T1> param) where T2: base of T1 

(... где T2: основание T1)

+0

Используйте 'где T2: T1'. – Abion47

+0

@ Abion47 спасибо за показ направления, но я думаю, вы хотели сказать 'где T1: T2' –

+0

Возможно. Ваша формулировка немного запутанна в отношении того, в каком направлении вы хотели ее уйти. – Abion47

ответ

8

Вы можете указать его в общий параметр:

public static List<T2> ConvertList<T1, T2>(List<T1> param) 
       where T1:class,T2 
       where T2:class 
{ 
    List<T2> result = new List<T2>(); 

    foreach (T1 p in param) 
     result.Add((T2)p); 

    return result; 
} 
+0

Отлично, это то, что я искал. Почему я не думал об этом синтаксисе? –