У меня есть базовый класс LabFileBase. Я создал список и добавил к нему свои производные классы. Я хочу выполнить поиск в списке для определенного объекта на основе ключа, который я определил. Проблема, с которой я сталкиваюсь, заключается в том, как вы угасаете в выражении LINQ?Downcasting и Linq
Вот некоторые примеры код:
public abstract class LabFileBase
{
}
public class Sample1 : LabFileBase
{
public string ID {get;set;}
public string Name {get;set;}
//..
}
public class Sample2 : LabFileBase
{
public string ID {get;set;}
public string Name {get;set;}
//..
}
Я хочу найти конкретный тип Sample2, но мне нужен обратное приведение, если я использовал обычный цикл Еогеаспа так:
foreach(var s in processedFiles) //processedFiles is a List<LabFileBase>
if (s is Sample2)
var found = s as Sample2;
if (found.ID = ID && found.Name == "Thing I'm looking for")
//do extra work
I скорее всего, было бы что-то вроде этого:
var result = processedFiles.Select(s => s.ID == SomeID && s.Name == SomeName);
Возможно ли это, и какой синтаксический punctu или это foreach
мой единственный вариант из-за разных объектов. В Sample1 и Sample2 только ID и Name имеют одинаковые поля.
EDIT: Спасибо всем за вашу поддержку и предложения, я ввел почти все в отставание для реализации.
seq.OfType() работает как seq.Where (эш => эль является MyFavType). –
yfeldblum
@Jon: Я обязательно рассмотрю перенос идентификатора и имени в базовый класс. Чем больше я думаю об этом, они действительно там. – Chris
@Justice: Не совсем, потому что он * также * заканчивается последовательностью целевого типа. Это как seq.Where (...). Cast <...>() –