Метод расширения Enumerable.OfType
работает за линейное время и, вероятно, достаточно быстр для ваших целей.Не оптимизируйте микро-код до тех пор, пока вы не измерили производительность и не уверены, что вам нужно оптимизировать его.
Вместо того, чтобы концентрироваться на производительности, вы должны в первую очередь подумать о пригодности вашего дизайна.Хороший дизайн в целом не должен проверять типы объекта - необходимая информация должна быть доступна другими способами.В этом случае, например, вы можете спросить, способен ли каждый загрузчик загрузить объект, передав этот объект методу CanLoad
и вернув true
или false
.Это сделает ваш дизайн более гибким.
Loader loader = loaders.First(x => x.CanLoad(myObject));
Теперь у вас могут быть загрузчики, которые могут загружать объекты нескольких типов.
Если вы каждый раз хотите новый загрузчик и вам нужен одно-сопоставление to-one другой вариант - также попросить сам объект создать подходящий загрузчик:
Loader loader = myObject.CreateLoader();
Каждый класс может реализовывать CreateLoader
по-своему, так что вы получаете загрузчик правильного типа для вашего объекта.Используя преимущества полиморфизма, это работает без необходимости спрашивать объект, какой это тип.