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

本文关键字:数据 异常 字符串 | 更新日期: 2023-09-27 17:47:21

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

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() 中某些看似无关紧要的实现细节,例如对字符串的调用。格式()位于不同的地方。

有没有人遇到过类似的事情或有任何想法可能导致这种情况的原因?

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

"我正在VS的"局部变量"窗口中检查它"

这就解释了。 与流行的看法相反,允许 C# 进行一定程度的优化。 如果不在函数末尾添加"KeepAlive",则实际上不必存储该值。

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