c# - Stylecop - 类 x 在我的继承层次结构中吗?

标签 c# inheritance hierarchy stylecop

有没有办法检查我的 elementtype 类元素在他的继承层次结构中是否有某个其他类?

我的用例是:我必须检查我的异常是否以“异常”为前缀。为此,我必须以某种方式确定某个类是否是异常。我可以确定的唯一方法是它是否由 Exception 类本身继承。

检查基类类型是否为异常很容易,但想象一下以下场景:

class GenericMathException : Exception{}
class SpecificMathException : GenericMathException{}

我能得到的关于 SpecificMathException 的唯一信息是它的基类类型是 GenericMathException ,但我无法在它的继承层次结构中更进一步。

通常的反射方法也不能使用,afaik。

那么,有人曾经不得不处理这个问题并找到了解决方案吗?或者有任何替代方法来识别异常?

提前致谢。

最佳答案

从本质上讲,StyleCop 确实只处理文件的内容,不能使用程序集本身的信息。

但是,如果您询问“识别异常的替代方法”,StyleCop+ 中有一条规则它执行非常接近您的检查。您指定基类列表(默认情况下为 AttributeExceptionEventArgsStream),它确保从它们继承的所有类的名称都以 ...Attribute...Exception 等结尾。

检查以下列方式进行。如果基类的名称以列表中的字符串结尾,它确保继承类的名称也应以相同的字符串结尾。例如,如果它满足 Class2 : InvalidOperationExceptionClass2 : SomeUnknownException,这两种情况都会引发违规。

假设您遵循这条规则,您所有继承的类都将始终命名得很好,即使它们是多重继承的。唯一不能用这种方式检查的是你处理一些不是来自“你的”程序集的类的情况,它们已经违反了这个规则。例如,如果某些程序集有 Class2 : Exception,并且您将此程序集引用为二进制文件(并且没有机会使用 StyleCop 检查它),那么您将无法检查您的 Class3 继承自 Class2 应以 ...Exception 为前缀。

但实践表明,最后一个问题很少见,因此上述方法对 StyleCop 非常有效。

关于c# - Stylecop - 类 x 在我的继承层次结构中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180654/

相关文章:

c# - 数字后面的字母,它叫什么?

java - 删除继承类 JPA

d3.js - 避免 d3.js 中树形布局中的节点重叠

Symfony2 : Storing users, 角色、角色层次结构和数据库中的访问控制

Java Scene Builder 2.0,编辑器中的 Tab2 切换到 Tab1?

c# - 编写一个函数来比较两个字符串并返回第三个字符串,该字符串仅包含出现在两个字符串中的字母

c# - 是否可以使用 TBA 作为身份验证方法找到 netsuite 员工的角色?

c# - 在 C# Dll 中保存加密数据和私钥的安全方法

python - 为什么属性引用在 Python 继承中会这样?

java - Hibernate注解继承OneToMany Placement