有没有办法检查我的 elementtype 类元素在他的继承层次结构中是否有某个其他类?
我的用例是:我必须检查我的异常是否以“异常”为前缀。为此,我必须以某种方式确定某个类是否是异常。我可以确定的唯一方法是它是否由 Exception 类本身继承。
检查基类类型是否为异常很容易,但想象一下以下场景:
class GenericMathException : Exception{}
class SpecificMathException : GenericMathException{}
我能得到的关于 SpecificMathException
的唯一信息是它的基类类型是 GenericMathException
,但我无法在它的继承层次结构中更进一步。
通常的反射方法也不能使用,afaik。
那么,有人曾经不得不处理这个问题并找到了解决方案吗?或者有任何替代方法来识别异常?
提前致谢。
最佳答案
从本质上讲,StyleCop 确实只处理文件的内容,不能使用程序集本身的信息。
但是,如果您询问“识别异常的替代方法”,StyleCop+ 中有一条规则它执行非常接近您的检查。您指定基类列表(默认情况下为 Attribute
、Exception
、EventArgs
和 Stream
),它确保从它们继承的所有类的名称都以 ...Attribute
、...Exception
等结尾。
检查以下列方式进行。如果基类的名称以列表中的字符串结尾,它确保继承类的名称也应以相同的字符串结尾。例如,如果它满足 Class2 : InvalidOperationException
或 Class2 : SomeUnknownException
,这两种情况都会引发违规。
假设您遵循这条规则,您所有继承的类都将始终命名得很好,即使它们是多重继承的。唯一不能用这种方式检查的是你处理一些不是来自“你的”程序集的类的情况,它们已经违反了这个规则。例如,如果某些程序集有 Class2 : Exception
,并且您将此程序集引用为二进制文件(并且没有机会使用 StyleCop 检查它),那么您将无法检查您的 Class3
继承自 Class2
应以 ...Exception
为前缀。
但实践表明,最后一个问题很少见,因此上述方法对 StyleCop 非常有效。
关于c# - Stylecop - 类 x 在我的继承层次结构中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180654/