C#中的'is'关键字在什么情况下会抛出异常?

4

我在我们的代码库中发现了类似以下内容的东西...

    protected bool IsThing(object item)
    {
        try
        {
            return item is Thing;
        }
        catch (Exception)
        {
            return false;
        }
    }

我正在尝试确定是否存在任何情况下会触发此catch


捕获无用。异常应该通过抛出或记录来传递。 - Zo Has
2
@JonSkeet 可以让 is 运算符抛出异常。http://meta.stackexchange.com/questions/9134/jon-skeet-facts - Adriaan Stander
1
@DamienJoe,问题不在于异常返回了什么,而在于它永远不会被触发。 - gingerbreadboy
2个回答

15
< p > is 关键字不会抛出异常。 这是一个无用的方法,您应该将其删除。

if(IsThing(item)) {...} 可以被替换为更好的 if(item is Thing) { ... }


我认为原文的情感表达是完全有效的 ;) - gingerbreadboy
1
@gingerbreadboy 哈哈,我认为编写这个方法的人可能是想要“终身就业”(https://www.thc.org/root/phun/unmaintain.html)。 - dcastro
有没有任何文档明确说明 'is' 操作符永远不会抛出异常? - gingerbreadboy
2
@gingerbreadboy: 在其他地方(http://msdn.microsoft.com/en-us/library/cc488006.aspx)中提到,“您可以使用[**is**和**as**]运算符测试强制转换是否成功,而不会导致抛出异常。” - BoltClock

3

是的,我查看了这个msdn条目,但它并没有明确说明is不能抛出任何异常,所以我来这里问问题。不过还是谢谢 :) - gingerbreadboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接