我有一些继承的代码,这些代码倾向于将对象作为接口(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$;
}