【发布时间】:2013-08-25 18:43:33
【问题描述】:
我正在实现一个 IDictionary 接口,它的 object 具有参数 get set。
object this [object key] { get; set; }
我想强制密钥是字符串类型,所以在我的代码中我这样做:
(if key.GetType() != typeof(string)) {
//
}
当这种情况发生时,我想抛出一个异常。但是我不知道在这种情况下使用什么最合适的例外。我能找到的最接近的是 TypeInitializationException 和 ArgumentException。但是,在document 中声明:“如果将错误的参数传递给成员,请抛出 System.ArgumentException 或其子类型之一”,这让我想知道我的用例是否正确。
我的箱子应该怎么用?我应该使用 Assert 而不是抛出异常吗?
【问题讨论】:
-
如果您愿意,也可以实现自己的异常。
-
如果您将其传递为空,您的代码将通过空指针异常。如果你使用
!(key is string),你会得到你在if中抛出的任何异常。 -
为什么不强制 key 是 type 参数中的字符串?例如IDictionary
-
@MatthewMcveigh,你介意给我一个关于如何在类型参数中强制执行它的例子吗?这是我没有想到的。
-
@bizi 如果您使用通用 IDictionary,您可以使用:class YourDictionary
: IDictionary