Есть ли способ динамически назначить тип для общего выражения linq? - PullRequest
0 голосов
/ 08 февраля 2019

есть ли способ получить объект из коллекции определенного подтипа, когда подтип известен только во время выполнения?что-то вроде:

class A
{}

class B : A
{}

class C : A
{}

Main()
{ 
  List<A> outsideList = new List<A>() {new A(), new B(), new C()};

     foreach(var ojb in outsideList)
     {
       dosomethingwithanobject(ojb);
     }
}

void dosomethingwithanobject(A obj)
{
     List<A> intenalList = new List<A>() { new C(), new A(), new B()};
   // this can be A, B or C
   type DESIREDTYPE = typeof(obj);

  var item = list.GetSubType<DESIREDTYPE>().FirstOrDefault();

      // do something with the item
}

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

LINQ имеет две операции для преобразования последовательности неизвестных (или родительских) типов в подтипы: Cast и OfType.

Cast применяет преобразование типа к каждому элементу и завершается ошибкой, если ононедействительным.OfType возвращает только элементы, которые могут быть преобразованы в новый тип.

Итак,

var item = list.OfType<DESIREDTYPE>().FirstOrDefault();
0 голосов
/ 08 февраля 2019

Я думаю, вы можете использовать следующий код:

var result = intenalList.Where(x => x.GetType() == obj.GetType()).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...