Можно ли привести общий список типа к универсальному списку его супертипа? - PullRequest
1 голос
/ 17 ноября 2010

пытаюсь сделать ниже, но, очевидно, недостаточно знаю об отражении.

Пример того, что я пытаюсь сделать, я хочу "разрешить" список JazzDancer в список Dancer(от которого наследуются все типы танцоров).Хочу убедиться, что если DanceStyle здесь - Jazz, в списке танцоров будет только тип JazzDancer.надеюсь, что это имеет смысл.

Проблема в том, что кажется, что вы не можете разыграть Список в Список.

Возможно ли это?

List<Dancer> dancers = TypeNameResolver<Dancer>.ResolveList(DanceStyle, typeof(Dancer));


public static List<T> ResolveList(IDanceStyle style, Type toType)
        {
            Type list = typeof (List<>);
            Type[] pars = { TypeNameResolver<T>.Resolve(style,toType).GetType()};
            List<T> result = (List<T>)Activator.CreateInstance(list.MakeGenericType(pars));
            return result;
        }

public static T Resolve(IDanceStyle style, Type toType)
{
    Assembly a = Assembly.GetExecutingAssembly();
    var typeName = style.GetType().Name + toType.Name;
    var toTypeNameSpace = toType.Namespace;
    return (T)a.CreateInstance(toTypeNameSpace + "." + typeName);
}

Ответы [ 2 ]

3 голосов
/ 17 ноября 2010

Вам не нужно размышление для этого. LINQ, с другой стороны, может помочь здесь:

List<JazzDancer> myListOfJazzDancers = ...;
List<Dancer> myListOfDancers = myListOfJazzDancers.Cast<Dancer>().ToList()
1 голос
/ 17 ноября 2010

Вы можете сделать это с помощью запроса Linq:

dancers = jazzDancers.Cast<Dancer>();

Если вам нужно выполнить какую-то проверку для каждого jazzDancer, просто добавьте Where, например:

dancers = jazzDancers.Where(jd => jd.SomeFiels == Something).Cast<Dancer>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...