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

这是一个愚蠢的例子:

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

我想做的是编写一个NDepend CQL查询,以获取这些类型的类型转换,并为我提供每种方法,每种类型或真正的计数。就是这样,我知道我可以从哪里开始集中精力摆脱这个特殊的愚蠢品牌,而不是让我的团队通过代码随意搜寻 Actor 阵容...

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

当然,任何其他有关使 Actor 搜寻更快的方法的想法也将同样受到赞赏。

最佳答案

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

NDepend Entities

  • 方法
  • 字段
  • 类型
  • 命名空间
  • 组件

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

    现在,帕特里克·斯马基亚(Patrick Smacchia)可能会告诉我与众不同,所以我将向他提出这个问题。我希望他很快就能得到回应,因为他很精通。

    附带说明:

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

    此模式将捕获上面的示例:
    if($fooObject$ is $concreteFoo$)
    {
        return (($concreteFoo$)$fooObject$).$anyIdentifier$;
    }
    

    10-08 07:54