导致字符串中的垃圾数据的异常(C#)

时间:2008-10-08 03:20:58

标签: c# exception

好的,这很奇怪。垃圾数据也不是随机的,它似乎是可执行文件本身的子字符串。

private void Form1_Load(object sender, EventArgs e)
{
    string s = GetValue();
    // at this point, s == "400". Why isn't really relevant (dumbed down a test)
    if (s != "18446744073709551615") 
        throw new Exception();
        // When the exception is thrown though, the string is set to random
        // data from inside the executable.
}

这似乎依赖于GetValue()中某些看似无关紧要的实现细节,例如对不同位置的string.Format()的调用。

有没有人遇到类似的东西或有什么想法会导致这种情况?

2 个答案:

答案 0 :(得分:2)

“我正在VS”

的“Locals”窗口中查看它

这解释了它。与流行的看法相反,允许C#进行一些优化。如果您没有在函数末尾添加“KeepAlive”,则实际上不必存储该值。

答案 1 :(得分:0)

如果你在抛出异常后检查变量并且现在已超出范围,那么它应该只指向内存中的垃圾。您是否尝试在抛出异常之前和之后检查此变量的值?