Но ужасное открытие меня ожидало при разработке библиотеки с использованием типов dynamic. "Расширительные" методы на нем не только не работают, но даже не выдают ошибки. Точнее, генерируют исключение уже во время работы.
Хотя такое поведение логично (тип-то динамический), в коде оно создает дикую путаницу, особенно при рефакторинге. Выхода три:
1. Не использовать extension методы
2. Не использовать dynamic типы
3. Терпеть как есть, сохранять бдительность и качественно тестировать код. Как вариант - можно вызывать методы расширения как обычные статические методы для dynamic:
dynamic dynamicObject = new object();
object obj = new object();
// вызов расширения для object
obj.ExtensionMethod();
// вызов расширения для dynamic
ObjectExtensions.ExtensionMethod(dynamicObject);
Если писать так - то все работает. Но профита в методах расширения уже нет
Комментариев нет:
Отправить комментарий