我有一些继承的代码,它倾向于将对象作为接口传递(例如,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查询来获取这些类型的强制转换并给我一个方法,或每种类型,或任何真正的计数.只是这样,所以我知道在哪里我可以开始集中精力去摆脱这种特殊的愚蠢品牌,而不是让我的团队通过代码随意搜索演员...
有谁知道有没有办法做到这一点?我猜不是(那里不会有太多人需要那个特定的功能)但我想我先问这里...... :-)
当然,关于如何使投射更快的任何其他想法同样会受到赞赏.
这会非常好,但是NDepend仅限于一组实体,不涵盖单个语句。
尽管有这个限制,NDepend 仍然非常棒!也许这是下一个版本的功能。
现在帕特里克·斯马基亚(Patrick Smacchia)也许能告诉我不同的答案,所以我会就这个问题联系他。我希望能很快得到回复,因为他对事情非常了解。
如果您使用ReSharper 5.0,它有一个结构搜索,可以让您找到这样的语句。您必须自己构建搜索,但它是一个非常强大的工具。
这种模式可以捕捉上面的例子:
if($fooObject$ is $concreteFoo$)
{
return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}
Run Code Online (Sandbox Code Playgroud)