Явное приведения типов это сложная операция?
Например есть лист List, в нем объекты наследованы от класса и реализующие один интерфейс.
чтоб использовать то что от класса, нужно преобразовывать к классу. нормально если в цикле делать так:
for (int i = 0; i < count; i++)
{
(list[i] as MyClass).FunctionMyClass();
}
или когда нужно указать элемент object и класс и он реализует интерфейс, то например:
T obj = list[list.Count - 1] as T
(where T : MyClass, IMyInterface)