在C#中使用异常导致类型不匹配

时间:2013-08-22 20:49:43

标签: c# exception

我正在实现一个IDictionary接口,其object get的参数为set

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

我想强制键成为字符串类型,所以在我的代码中我做:

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

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

我应该如何使用我的案子?我应该使用断言而不是抛出异常吗?

2 个答案:

答案 0 :(得分:6)

ArgumentException是正确的例外。整个BCL使用它,所以你应该。 TypeInitializationException完全不适合。它只有一个用例:一个扔静态的ctor。

那就是说,如果你没有制作一个库(只是内部代码),如果有充分的理由,你可以偏离该约定。如果您想使用Debug.Assert或其他替代方法,请随意使用。

答案 1 :(得分:3)

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

如果您需要应用其他方法而不是代码合同是最好的方法。

实施例: Contract.Requires(key是string); 等等 Assert不适合此问题,但可以应用ArgumentException。

由于