Избыточное преобразование при простой проверке


Исходный код

return Array.IndexOf<int>
            (
                Array.ConvertAll<object, int>
                (
                usedTemplates,
                delegate(object o) { return (int)o; }
                ),
                templateID
            )
            >= 0;

Что не так в исходном коде

Беглый анализ кода даёт представление о назначении этого фрагмента: здесь выполняется проверка наличия шаблона с заданным идентификатором (templateID) в списке использованных шаблонов (usedTemplaes).

Я не люблю реализации алгоритмов проверки, которые без должного на то основания выполняют преобразования своих входных данных.

Вместо преобразования массива шаблонов к массиву идентификаторов с последующим поиском в нём нужного значения, следовало бы ограничиться поиском элемента в исходном массиве шаблонов с кастомной проверкой. Такой фокус позволяет проделать метод Array.FindIndex:

return Array.FindIndex(usedTemplates, template => (int)template == templateID) >= 0;