Приведение универсальных типов <T>

283
08 сентября 2017, 19:31

Есть задача:

public class A { }
public class A1 : A { }
public class A2 : A { }
public class B<T> where T : A { }
public class B1 : B<A1> { }
public class B2 : B<A2> { }
public class Conteiner<T, U> where T : B<U> where U : A
{ 
    T[] list;
    public T this[int index]
    {
        get { return list[index]; }
        set { list[index] = value; }
    }
    public void Set<K, N, M>(K conteiner)
        where K : Conteiner<N, M>
        where N : B<M>
        where M : A
    { 
        list[0] = conteiner[0]; <------Ошибка не удается преобразовать тип N в T.
    } 
}

Как решить или обойти проблему?

Answer 1

можно обойтись делая так:

public class Conteiner<T, U> where T : B<U> where U : A
{
    T[] list;
    public T this[int index]
    {
        get { return list[index]; }
        set { list[index] = value; }
    }
    public void Set<K,N,M>(Conteiner<T, U> conteiner)
        where K : Conteiner<N, M>
        where N : B<M>
        where M : A
    {
        list[0] = conteiner[0];
    }
}
READ ALSO
Что такое Claims и как они работают ?

Что такое Claims и как они работают ?

Какое практическое примение Claims в AspNet Identity

324
Установить иконку в TabControl справа

Установить иконку в TabControl справа

Подскажите пожалуйста, как установить иконку во вкладке TabControl с правой стороны?

292
Валидация SecurityStamp в Json web token

Валидация SecurityStamp в Json web token

Вопрос: Как "правильно" валидировать SecurityStamp в JWT

304
C#. Реализация Repository без использования ORM

C#. Реализация Repository без использования ORM

Я сделал небольшой проект, который собираюсь использовать как ORM при разработке приложений для Windows CE 50

319