C#中一个非常简单的?:运算符,结合一个简单数组和LINQ(对象)调用Reverse()显然足以导致异常“System.Security.VerificationException:Operation可能会破坏运行时的稳定性”。在以“高”信任运行的ASP.NET网站上运行时(请注意“完整”是默认值)
以下是代码,以及我提出的简单解决方法:
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=""/>
该解决方法的功能等同于解决问题的有问题的?:运算符。我从阅读相关帖子的猜测是这是一个C#编译器错误。有谁知道这里发生了什么?
答案 0 :(得分:1)
这一行没有问题:
return test ? widgets.AsEnumerable() : widgets.Reverse();
答案 1 :(得分:0)
我发现改变表达式的顺序也适用于这个问题:
private IEnumerable<string> Workaround() {
bool test = true;
string[] widgets = new string[0];
return !test ? widgets.Reverse() : widgets;
}
去图!