【问题标题】:C# static variables not persisting?C# 静态变量不持久?
【发布时间】:2015-08-05 15:23:42
【问题描述】:

下面是我的代码 sn-p,变量“_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;
        }
    }
}

【问题讨论】:

  • 您的get 方法正在清除它? Utils._lastError = string.Empty;
  • 只有在调试时将鼠标悬停在属性上才会重置它...
  • 请描述你的类 Utils 应该做什么。目前,它看起来不太好......你有私人二传手,唯一的集是在吸气?有些东西闻起来很香。
  • @JamesThorpe:这是有意的。我的意思是让它在被引用后清除该值。
  • 这就是它没有持续存在的原因。第一次在任何地方读取它(包括根据@Patrick 的评论在调试器中),它将被清除。

标签: c# static persist


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2021-05-19
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多