我正在实现一个IDictionary接口,其object
get
的参数为set
。
object this [object key] { get; set; }
我想强制键成为字符串类型,所以在我的代码中我做:
(if key.GetType() != typeof(string)) {
//
}
我希望在发生这种情况时抛出异常。但是我不知道在这种情况下使用什么最合适的例外。我能找到的最接近的是 TypeInitializationException 和 ArgumentException 。但是,在document中声明:“如果将错误的参数传递给成员,则抛出System.ArgumentException或其子类型之一”,这让我想知道我的是否是正确的用例。
我应该如何使用我的案子?我应该使用断言而不是抛出异常吗?
答案 0 :(得分:6)
ArgumentException
是正确的例外。整个BCL使用它,所以你应该。 TypeInitializationException
完全不适合。它只有一个用例:一个扔静态的ctor。
那就是说,如果你没有制作一个库(只是内部代码),如果有充分的理由,你可以偏离该约定。如果您想使用Debug.Assert
或其他替代方法,请随意使用。
答案 1 :(得分:3)
首先我认为,最好的解决方案是Mathhew;为什么你不使用字符串类型的通用字典。
如果您需要应用其他方法而不是代码合同是最好的方法。
实施例: Contract.Requires(key是string); 等等 Assert不适合此问题,但可以应用ArgumentException。
由于