В C# существует множество способов использования множественной фильтрации с помощью LINQ. Один из самых распространенных методов - использование метода расширения OfType
.
Метод OfType
может быть использован для фильтрации элементов коллекции по заданному типу. Он оставляет только те элементы, которые являются экземплярами указанного типа, игнорируя все остальные элементы.
Для реализации множественной фильтрации с помощью OfType
можно использовать несколько вызовов этого метода подряд.
Например, предположим, у нас есть коллекция myCollection
, содержащая объекты разных типов:
List<object> myCollection = new List<object> { "строка1", 42, new List<int> { 1, 2, 3 }, "строка2", new List<string> { "a", "b", "c" }, DateTime.Now, "строка3" };
Для того, чтобы отфильтровать только строки и целые числа из myCollection
, можно воспользоваться несколькими вызовами OfType
:
IEnumerable<string> filteredStrings = myCollection.OfType<string>(); IEnumerable<int> filteredInts = myCollection.OfType<int>();
В результате получим две коллекции filteredStrings
и filteredInts
, содержащие только строки и целые числа из исходной коллекции myCollection
.
Также, в зависимости от вашего конкретного случая, можно использовать комбинацию методов фильтрации LINQ, таких как Where
, OfType
, Cast
. Методы Where
и OfType
можно использовать для фильтрации по определенному типу, а метод Cast
позволяет привести объекты к заданному типу.
Например, предположим, у нас есть коллекция myCollection
, содержащая объекты следующих типов:
- string
,
- int
,
- List<int>
,
- object[]
.
Хотим отфильтровать все элементы, являющиеся списками типа int
, и вывести все их элементы:
IEnumerable<int> filteredInts = myCollection .OfType<List<int>>() .SelectMany(x => x);
В результате создаётся коллекция filteredInts
, включающая все элементы списков типа int
из исходной коллекции myCollection
.