【发布时间】:2009-09-11 18:35:03
【问题描述】:
我目前正在为 UnconstrainedMelody 编写一些代码,其中包含与枚举有关的通用方法。
现在,我有一个带有一堆方法的静态类,这些方法仅用于“标志”枚举。我不能将其添加为约束...因此它们也可能会与其他枚举类型一起调用。在这种情况下,我想抛出一个异常,但我不确定要抛出哪一个。
只是为了具体化,如果我有这样的事情:
// Returns a value with all bits set by any values
public static T GetBitMask<T>() where T : struct, IEnumConstraint
{
if (!IsFlags<T>()) // This method doesn't throw
{
throw new ???
}
// Normal work here
}
什么是最好的抛出异常? ArgumentException 听起来合乎逻辑,但它是一个 type 参数而不是普通参数,这很容易混淆。我应该介绍我自己的TypeArgumentException 班级吗?使用InvalidOperationException? NotSupportedException?还有什么?
我宁愿不为此创建自己的例外,除非这显然是正确的做法。
【问题讨论】:
-
我今天在编写一个泛型方法时偶然发现了这一点,其中对所使用的类型提出了额外的要求,而这些要求无法用约束来描述。我很惊讶没有在 BCL 中找到异常类型。但是这个确切的困境是我几天前在同一个项目中也面临的一个问题,即一个只能使用 Flags 属性的泛型。诡异!