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

biz*_*izi 7 c# exception

我采取一个IDictionary接口,它有参数object为它get set.

object this [object key] { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

(if key.GetType() != typeof(string)) {
    //
}
Run Code Online (Sandbox Code Playgroud)

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

我该怎么用我的情况?我应该使用Assert而不是抛出异常吗?

usr*_*usr 7

ArgumentException是正确的例外.整个BCL都使用它,所以你应该这样做.TypeInitializationException根本不适合.它只有一个用例:抛出静态ctor.

也就是说,如果您没有生成库(只是内部代码),如果有充分的理由,您可以偏离该约定.如果您想使用Debug.Assert某种替代品,请随意使用.