在C#中抛出异常后返回语句

Fai*_*oor 6 c# dictionary

Systems.Collections.Generic.Dictionary类的以下函数在抛出异常后有返回语句,有没有人知道为什么?

    public TValue this[TKey key] {
        get { 
            int i = FindEntry(key);
            if (i >= 0) return entries[i].value;
            ThrowHelper.ThrowKeyNotFoundException();
            **return default(TValue);** 
        }
        set { 
            Insert(key, value, false); 
        }
    } 
Run Code Online (Sandbox Code Playgroud)

Joh*_*zen 7

即便如此

ThrowHelper.ThrowKeyNotFoundException();
Run Code Online (Sandbox Code Playgroud)

当然会抛出异常,编译器不够复杂,无法证明它永远不会做任何其他事情.而且由于无法证明函数永远不会返回,因此必须假设它可以返回.

Eric Lippert刚刚在他的博客上完成了一个关于这个问题的"永不言败"的迷你系列.

http://blogs.msdn.com/b/ericlippert/archive/2011/02/21/never-say-never-part-one.aspx

事实证明,这是停止问题的一个简单案例,已经证明它对于图灵机是不可判定的.