Yan Cui
I help clients go faster for less using serverless technologies.
This article is brought to you by
Don’t reinvent the patterns. Catalyst gives you consistent APIs for messaging, data, and workflow with key microservice patterns like circuit-breakers and retries for free.
Of all the methods available on the Enumerable class, OfType<T> is arguably one of the most useful and yet under utilized method.
For example, you have a list of Cat and Dog objects, all inheriting from a common Animal class, but occasionally you want to perform operations on only the dogs or cats, and that’s where OfType can come in handy:
public class Animal { public string Name { get; set; } } public class Dog : Animal {} public class Cat : Animal {} … var animals = new Animal[] { new Cat { Name = "Jess" }, new Cat { Name = "Tad" }, new Dog { Name = "Bob" } }; // get the dogs from the array of animals, functional style var dogs = animals.OfType<Dog>(); // get the cats from the array of animals, true imperative style var cats = new List<Cat>(); foreach (var animal in animals) { if (animal is Cat) cats.Add(animal as Cat); }
Of course, you could equally have filtered the array like this:
// lambda expression syntax var cats = animals.Where(a => a is Cat).Select(a => a as Cat); // query expression syntax var cats = from a in animals where a is Cat select a as Cat;
But using OfType is far cleaner and expressive of your intent.
Whenever you’re ready, here are 3 ways I can help you:
- Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
- I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.
Your post is very interesting. Very informative and just what I was searching for. I will see if I can find some additional useful ideas. Thank you.