我可以使用NDepend来计算演员表吗?

Chr*_*ter 8 c# ndepend

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

这是一个愚蠢的例子:

public bool IsThisFooScaredOfMonkeys(IFoo foo)
{
    if (foo is MyConcreteFoo)
    {
        return ((MyConcreteFoo)foo).BelievesMonkeysAreEvil;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我想做的是写一个NDepend CQL查询来获取这些类型的强制转换并给我一个方法,或每种类型,或任何真正的计数.只是这样,所以我知道在哪里我可以开始集中精力去摆脱这种特殊的愚蠢品牌,而不是让我的团队通过代码随意搜索演员...

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

当然,关于如何使投射更快的任何其他想法同样会受到赞赏.

Jos*_*osh 2

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

NDepend 实体

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

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

现在帕特里克·斯马基亚(Patrick Smacchia)也许能告诉我不同​​的答案,所以我会就这个问题联系他。我希望能很快得到回复,因为他对事情非常了解。

附注:

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

这种模式可以捕捉上面的例子:

if($fooObject$ is $concreteFoo$)
{
    return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}
Run Code Online (Sandbox Code Playgroud)