2009-01-25 71 views
1

C#中一個非常簡單的?:操作符與一個簡單的數組和LINQ(對象)調用Reverse()顯然足以導致異常「 System.Security.VerificationException:操作可能會破壞運行時的穩定性。「當「高」信任運行ASP.NET網站運行(注意,「全」是默認值)爲什麼簡單數組和Linq生成VerificationException:操作可能會使運行時不穩定

下面是代碼,加上我想出了簡單的解決方法:

protected void Page_Load(object sender, EventArgs e) { 
    Repro(); 
    //Workaround(); 
} 

private IEnumerable<string> Repro() { 
    bool test = true; 
    string[] widgets = new string[0]; 
    return test ? widgets : widgets.Reverse(); 
} 

private IEnumerable<string> Workaround() { 
    bool test = true; 
    string[] widgets = new string[0]; 
    if (test) { 
     return widgets; 
    } else { 
     return widgets.Reverse(); 
    } 
} 

要信任級別設置爲「高」,以下必須添加到web.config文件:

<trust level="High" originUrl=""/> 

解決方法是等同於問題的功能:操作員repros問題。我從閱讀相關帖子的猜測是這是一個C#編譯器錯誤。任何人都知道這裏發生了什麼?

回答

1

這條線沒有問題:

return test ? widgets.AsEnumerable() : widgets.Reverse(); 
0

我發現,改變了表達的順序解決這個問題的工程,以及:

private IEnumerable<string> Workaround() { 
    bool test = true; 
    string[] widgets = new string[0]; 
    return !test ? widgets.Reverse() : widgets; 
} 

去圖!

相關問題