【问题标题】:How to clear static variables in C#C#清除静态变量的方法
【发布时间】:2012-11-19 09:54:42
【问题描述】:

我在我的类中声明了一个静态变量,我希望它在使用后被清除。它是 int 类型。

另外,当视图被卸载时,是否有任何控制器函数被调用?也许我可以在那里清除变量。

如果需要更多信息,请告诉我。
更新
我正在将一个值从我的视图传递给控制器​​。现在,当我的控制器具有此值时,我希望它能够持续。我使用的是静态的。
现在证明它很方便。我欢迎提出更好的解决方案的建议。但请务必为我提供当前问题的解决方案:)

【问题讨论】:

  • 老实说,听起来好像变量不应该是静态的。根据我的经验,静态变量/字段很少能很好地解决问题。它们往往本身就是问题。
  • 这个静态变量的目的是什么?请注意,静态变量不绑定到特定的实例/对象。
  • 我正在将一个值从我的视图传递给控制器​​。现在,当我的控制器具有此值时,我希望它能够持续。我使用的是静态的。
  • 将值从视图传递到控制器是违反 MVC 原则的。我强烈建议,不要这样做。
  • @mipe34 : 即使我使用回调方法?

标签: c# asp.net-mvc static


【解决方案1】:

如果您想清除静态变量 - 为其分配新值。

如果您想在控制器操作之前/之后执行某些操作 - 使用 action filters。自定义操作过滤器允许您覆盖以下方法(并在那里执行您的逻辑):

  • OnActionExecuting – 在执行控制器操作之前调用。
  • OnActionExecuted – 在执行控制器操作后调用。
  • OnResultExecuting – 在执行控制器操作结果之前调用。
  • OnResultExecuted – 在执行控制器操作结果后调用。

【讨论】:

  • 感谢您回答我的第二个问题。但是对于第一个,给它分配一个新值会不会是一样的?我想我以错误的方式提出了我的问题。如何释放或释放静态变量?对不起,如果这听起来很奇怪,因为我最近开始使用 c#。
  • @Nitish:没有办法释放或“释放”静态变量,因为它是静态的。正如我在评论中提到的,静态很少是一种好方法。如果您更新您的问题来解释您想要实现的目标,您可能会得到更好的建议。
  • 让浏览器将数据传递给控制器​​。视图仅用作模型数据的占位符。
【解决方案2】:

我强烈建议您反对在 Web 应用程序的上下文中使用静态变量。请记住,许多请求可以由不同的线程同时处理,从而导致真正“难以发现”的错误。

改用静态ThreadLocal<T>

【讨论】:

    【解决方案3】:

    您还可以将静态变量包装在会话中以维护每个会话的不同值,就像这样。

        public static Int32 MyInt
        {
            get
            {
                return (Int32)HttpContext.Current.Session["MyInt"];
            }
            set
            {
                HttpContext.Current.Session["MyInt"] = value;
            }
        }
    

    如果这就是您要清除该值的原因,您将不再需要清除它。

    【讨论】:

    • 好吧,这不是您问题的确切答案;)...您只能将初始值重新分配给静态变量,不能像“清除”一词所暗示的那样完全清除它...
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2018-10-22
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多