Могу ли я использовать NDEPEND для счета каста?

StackOverflow https://stackoverflow.com/questions/3577962

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня есть какой-то унаследованный код, который имеет тенденцию пропускать объекты вокруг в качестве интерфейсов (например, IFOO), при произвольных местах в коде, спонтанно бросили их в конкретные реализации этих интерфейсов (скажем, myConcretefoo).

Вот глупый пример:

public bool IsThisFooScaredOfMonkeys(IFoo foo)
{
    if (foo is MyConcreteFoo)
    {
        return ((MyConcreteFoo)foo).BelievesMonkeysAreEvil;
    }
    return false;
}

Что я хотел бы сделать, это написать запрос CQL NDEPEND CQL, чтобы забрать эти виды отливок и дать мне счет на метод или за тип или что-либо на самом деле. Всего что-то, так что я знаю, где я могу начать сосредоточить свои усилия по избавлениям от этой конкретной бренды глупости, а не отправлять мою команду Spalunking через код на случайной охоте на каскися ...

Кто-нибудь знает, есть ли способ сделать это? Я предполагаю, что нет (там не может быть слишком много людей, которые нуждаются в этой конкретной функциональности), но я подумал, что спрошу здесь сначала ... :-)

Конечно, любые другие идеи о способах заставить литой охотиться быстрее быть одинаково оценены.

Это было полезно?

Решение

Это было бы очень мило, но Ndepend. ограничен набором объектов, которые не покрывают отдельные заявления.

Предприятия NDEPend

  1. Методы
  2. Поля
  3. Типы
  4. Пространства имен
  5. Сборки

Несмотря на это ограничение ndepend все еще довольно круто! Возможно, это версия следующей функции.

Теперь Патрик Смакшию мог бы сказать мне по-другому, поэтому я свяжусь с ним с этим вопросом. Я бы ожидал, чтобы вернуть ответ быстро, так как он довольно на вершине вещей.

На стороне Примечание:

Если вы используете Resharper 5.0 оно имеет Структурное поиск Это позволило бы вам найти такие заявления. Вам придется построить поиск самостоятельно, но это довольно мощный инструмент.

Этот шаблон поймает пример выше:

if($fooObject$ is $concreteFoo$)
{
    return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top