我有一些继承的代码,它倾向于将对象作为接口传递(例如,IFoo),然后,在代码中的任意位置,自发地将它们转换为这些接口的具体实现(比如,MyConcreteFoo)。
这是一个愚蠢的例子:
public bool IsThisFooScaredOfMonkeys(IFoo foo)
{
if (foo is MyConcreteFoo)
{
return ((MyConcreteFoo)foo).BelievesMonkeysAreEvil;
}
return false;
}
我想要做的是写一个NDepend CQL查询来获取这些类型的强制转换,并为每个方法或每种类型或其他任何东西提供计数。只是这样,所以我知道在哪里我可以开始集中力量摆脱这种特殊的愚蠢品牌,而不是让我的团队通过代码随意搜索演员阵容......
有没有人知道是否有办法做到这一点?我猜不是(那里不会有太多人需要那种特殊功能)但我想我先问这里......: - )
当然,任何其他关于如何使投射更快的想法同样值得赞赏。
答案 0 :(得分:2)
这非常好,但NDepend仅限于一组不涵盖个别陈述的实体。
尽管存在这种限制,NDepend仍然非常棒!也许这是下一个版本的功能。
现在Patrick Smacchia或许可以告诉我不同的内容,所以我会用这个问题与他联系。我希望很快得到回复,因为他处于最重要的状态。
如果您使用的是ReSharper 5.0,则会Structural Search允许您查找此类语句。您必须自己构建搜索,但它是一个非常强大的工具。
这种模式会抓住上面的例子:
if($fooObject$ is $concreteFoo$)
{
return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}