1

C# 中的一个非常简单的 ?: 运算符,结合一个简单的数组和对 Reverse() 的 LINQ(对象)调用显然足以导致异常“System.Security.VerificationException:操作可能破坏运行时”。在以“高”信任运行的 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# 编译器错误。有人知道这里发生了什么吗?

4

2 回答 2

1

此行没有问题:

return test ? widgets.AsEnumerable() : widgets.Reverse();
于 2009-01-25T23:26:06.773 回答
0

我发现改变表达式的顺序也可以解决这个问题:

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

去搞清楚!

于 2009-01-26T01:33:40.820 回答