У меня есть следующие классы:
public class EntityBase<T>
{
public T Id { get; set; }
}
И это реализаторы:
public class ClassA : EntityBase<Int32>
{
...
}
public class ClassB : EntityBase<Int64>
{
...
}
А в коде, который не знает о классах - ClassA
и ClassB
он знает только о существовании EntityBase‹...>, я делаю примерно так:
// Here for sure I get the list of `ClassA`
object obj = GetSomeHowListOfClassA();
List<EntityBase<Int32>> listOfEntityBases = (List<EntityBase<Int32>>)obj;
И я получаю ошибку:
Unable to cast object of type 'System.Collections.Generic.List`1[...ClassA]' to type 'System.Collections.Generic.List`1[...EntityBase`1[System.Int32]]'.
Я исправляю это так:
var listOfEntityBases = new List<EntityBase<Int32>>(obj);
Но мне это не нравится, потому что я создаю новый список‹>. Есть ли способ бросить его? Спасибо за любой аванс.
MyClass<T> : EntityBase<T>
вместоClassA
иClassB
? - person Lanorkin   schedule 04.04.2013List<EntityBase<Int32>> listOfEntityBases = obj.Cast<EntityBase<Int32>>().ToList();
) - вы ищете чистый состав? - person Lanorkin   schedule 04.04.2013where T : EntityBase<TKey>
- person Aron   schedule 04.04.2013ClassA
, если у вас есть общий аргумент, в который вы помещаетеClassA
, И вы все еще можете иметь свойList<ClassA>
- person Aron   schedule 04.04.2013