質問
インターフェイスとしてオブジェクトを渡す傾向がある継承コード(たとえば、ifoo)があり、コード内の任意の場所で、それらを自発的にそれらのインターフェイスの具体的な実装(たとえば、myConcretefoo)にキャストします。
これがばかげた例です:
public bool IsThisFooScaredOfMonkeys(IFoo foo)
{
if (foo is MyConcreteFoo)
{
return ((MyConcreteFoo)foo).BelievesMonkeysAreEvil;
}
return false;
}
私がやりたいのは、ndepend CQLクエリを書いて、これらの種類のキャストをピックアップし、メソッドごと、またはタイプごとにカウントすることです。ただ何か、この特定のブランドの愚かさを取り除くことに努力を集中し始めることができる場所を知っているのは、キャストのランダムな狩りでチームをコードで綴っているのではなく...
それを行う方法があるかどうか誰もが知っていますか?私はそうではないと思います(その特定の機能を必要とする人はあまりにも多くの人がいることはありません)が、私は最初にここで尋ねると思いました... :-)
もちろん、キャストハンティングをより速くする方法に関する他のアイデアも同様に高く評価されます。
解決
これはとてもいいでしょうが、 ndepend 個々のステートメントをカバーしていないエンティティのセットに限定されています。
- 方法
- 田畑
- タイプ
- 名前空間
- アセンブリ
この制限にもかかわらず、ndependはまだかなり素晴らしいです!おそらくこれはバージョンの次の機能です。
今、パトリック・スマッキアは私に違うことを言うことができるかもしれないので、私は彼にこの質問で連絡します。彼は物事の上にかなりいるので、私はすぐに応答を取り戻すことを期待しています。
サイドノート:
使用している場合 Resharper 5.0 それはあります 構造検索 これにより、このようなステートメントを見つけることができます。自分で検索を構築する必要がありますが、それは非常に強力なツールです。
このパターンは、上記の例をキャッチします。
if($fooObject$ is $concreteFoo$)
{
return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}