8

我有一些继承的代码倾向于将对象作为接口传递(例如,IFoo),然后在代码中的任意位置,自发地将它们转换为这些接口的具体实现(例如,MyConcreteFoo)。

这是一个愚蠢的例子:

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

我想做的是编写一个 NDepend CQL 查询来获取这些类型的强制转换,并给我每个方法、每个类型或任何东西的计数。只是为了让我知道我可以从哪里开始集中精力摆脱这种特殊的愚蠢品牌,而不是让我的团队在代码中钻研随机寻找演员表......

有谁知道是否有办法做到这一点?我猜不是(不可能有太多人需要那个特定功能)但我想我会先在这里问...... :-)

当然,任何其他关于如何加快施法狩猎速度的想法都将受到同样的赞赏。

4

1 回答 1

2

这将是非常好的,但NDepend仅限于一组不涵盖单个语句的实体。

NDepend 实体

  1. 方法
  2. 字段
  3. 类型
  4. 命名空间
  5. 组件

尽管有这个限制,NDepend 仍然非常棒!也许这是一个版本的下一个功能。

现在Patrick Smacchia 可能会告诉我不同​​的说法,所以我会就这个问题与他联系。我希望很快得到回复,因为他非常了解事情。

旁注:

如果您使用的是ReSharper 5.0,它有一个结构搜索,可以让您找到这样的语句。您必须自己构建搜索,但它是一个非常强大的工具。

这种模式会捕捉到上面的例子:

if($fooObject$ is $concreteFoo$)
{
    return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}
于 2010-08-26T19:34:27.003 回答