8

我正在实现一个 IDictionary 接口,object它的get set.

object this [object key] { get; set; }

我想强制密钥是字符串类型,所以在我的代码中我这样做:

(if key.GetType() != typeof(string)) {
    //
}

当这种情况发生时,我想抛出一个异常。但是我不知道在这种情况下使用什么最合适的例外。我能找到的最接近的是TypeInitializationExceptionArgumentException。但是,本文档中声明:“如果将错误参数传递给成员,请抛出 System.ArgumentException 或其子类型之一”,这让我想知道我的用例是否正确。

我应该怎么用我的箱子?我应该使用断言而不是抛出异常吗?

4

2 回答 2

9

ArgumentException是正确的例外。整个 BCL 都使用它,您也应该使用它。TypeInitializationException根本不适合。它只有一个用例:投掷静态 ctor。

也就是说,如果您不生成库(只是内部代码),如果有充分的理由,您可以偏离该约定。如果您想使用一个Debug.Assert或一些替代方案,请随意使用。

于 2013-08-27T18:11:12.357 回答
3

首先我认为,最好的解决方案是 Mathhew 的;为什么你不使用字符串类型的通用字典。

如果您需要应用代码合同以外的其他方法,这是最好的方法。

示例:Contract.Requires(key is string); 等。 Assert 不适合这个问题,但可以应用 ArgumentException。

谢谢

于 2013-08-22T21:09:01.947 回答