C#静态变量不持久?

C#静态变量不持久?,c#,static,persist,C#,Static,Persist,下面是我的代码片段,变量“\u lastError”在设置后,在其他地方访问后似乎不会持久存在 有人能告诉我我错过了什么或做得不对吗?我已经调试了这个程序,在getter和private setter上都设置了一个断点。除了它打算访问或修改“_lastError”的值之外,似乎没有其他内容正在访问或修改该值 class Utils { private static string _lastError; public static string LastError {

下面是我的代码片段,变量“\u lastError”在设置后,在其他地方访问后似乎不会持久存在

有人能告诉我我错过了什么或做得不对吗?我已经调试了这个程序,在getter和private setter上都设置了一个断点。除了它打算访问或修改“_lastError”的值之外,似乎没有其他内容正在访问或修改该值

class Utils
{
    private static string _lastError;
    public static string LastError
    {
        get
        {
            string lastError = Utils._lastError;
            Utils._lastError = string.Empty;
            return lastError;
        }

        private set
        {
            Utils._lastError = value;
        }
    }

    public static void Foo()
    {
        try { // .... // }
        catch (Exception ex)
        {
            Utils.LastError = ex.Message;
        }
    }
}

如果预期的行为是保留最后一个错误直到它被访问一次,那么您描述它的行为方式是预期的


如果预期的行为是保留最后一个错误,直到另一个新的错误覆盖它,那么记住James的观点很重要。一旦访问静态值,就会清除它,正如Patrick指出的,这会影响调试器中的视图。调试器枚举所有属性,因为属性不会产生诸如清除支持它们的数据之类的副作用。

您的
get
方法正在清除它吗<代码>Utils.\u lastError=string.Empty仅在调试时将鼠标悬停在属性上,就会重置它…请描述类Utils应该做什么。现在看起来不太好。。。你有私人的setter,唯一的set是getter?“有些东西闻起来很难闻。”杰姆斯索普:这是故意的。我的意思是,一旦被引用,它就会清除该值。这就是为什么它不会持久的原因。第一次在任何地方读取它(包括@Patrick注释中的调试器),它将被清除。