用于检查C#中潜在铸造问题的工具

时间:2010-12-21 11:35:10

标签: c# visual-studio-2010

我的手上有以下情况。在我工作的项目中,我们有一个抽象类 A ,它有两个后代, A_concrete1 A_concrete2 。这两个现在已经有一段时间了。

现在是添加第三个后代 A_concrete3 的时候了。问题是,现有代码库中的大量时间你会发现类似的东西:

A instance;
// ...
// assignment of instance
// ...
if (!(A is A_concrete1))
  A_concrete2 = (A_concrete2)A;

现在,当 A 有两个以上的后代时,这段代码显然已经破坏,并且会在运行时失败。

我的问题是:如何自动找到所有这些情况,以便我可以修复它们?这样做的最佳方式/工具是什么?我尝试使用Resharper,但它没有为铸造分析提供任何东西。所以我很高兴听到关于这个的一些建议和指示。

提前致谢

1 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法是在A中使用方法(可能在子类中重写)以及给定A的任何代码仅使用它来调用A的方法,并且永远不会将其强制转换为任何子类。这样你就不必再这样做了。

可能在文件中查找(工具栏按钮具有文件夹上的双筒望远镜)是查找(A_concrete2)is A_concrete1的最佳方式。但是,不要只是进入那里并用一堆ifs替换if - 更改A以便它是一个更合适的基类。