Ответ 1
Используйте OfType<T>
следующим образом:
foreach (var bar in MyList.OfType<Foo>()) {
...
}
Есть ли способ найти в списке все элементы определенного типа с выражением Linq/Lambda?
Обновление. Из-за ответов я понимаю, что вопрос не был достаточно конкретным. Мне нужен новый List с только элементами определенного типа. В моем случае класс не имеет каких-либо подклассов, поэтому не нужно учитывать наследование.
Используйте OfType<T>
следующим образом:
foreach (var bar in MyList.OfType<Foo>()) {
...
}
Будет ли это делать?
list.Where(t => t is MyType);
Что-то вроде этого (если использовать Linq для объектов - он не будет работать с Linq для объектов):
var specificListOfTypes = from item in list
where item.GetType() == typeof(int)
select item;
возможно, вы могли бы использовать...
List<object> list = new List<object>();
list.Add("string");
list.Add(9);
var allOfOneType = list.Where(i => i.GetType().Equals(typeof(string)));
Вы можете использовать метод GetType() и сравнить его с указанным типом.
Например, я выбираю все значения типа строки из списка ниже:
var myList = new List<object>();
myList.Add(5);
myList.Add("My life");
var result = from obj in myList
where obj.GetType() == typeof(string)
select obj;
Я предлагаю использовать это
var myLst = new List<object>();
var elements = myList.Where(item => item.GetType().IsInstanceOfType(typeof(MyClass)));