【问题标题】:Variable initialized once with dynamic value变量用动态值初始化一次
【发布时间】:2018-04-26 06:14:17
【问题描述】:

我已经声明了一个常量变量,它存储在 cookie 中,所以没关系,因为不同的浏览器会有不同的副本。

private const string CookieName = "TempData";

现在我想将它存储在所有用户数据将被存储的第三个位置。

那么我怎样才能声明类似的东西

private const string CookieName = "TempData" + DataTime.Now.Tick.tostring(); 这样每个用户都会在第三个位置存储不同的 cookiename。

请指教。

【问题讨论】:

  • 我刚刚编辑了我的答案(那是错误的),请看一下。这是你要找的吗?
  • 您需要删除 const 关键字。这个变量是在哪里声明的?如果您想为每个用户使用不同的 cookie,那么为什么不使用用户本身的用户名或唯一 ID 创建 cookie。这会给你更多的控制权。
  • 此时没有用户详细信息

标签: c# .net asp.net-mvc constants


【解决方案1】:

为此,您不能使用const 字段。任何带有const 修饰符的东西都必须能够在编译时计算为常量。

你想要的是一个由静态构造函数初始化的静态字段

public class YourSurroundingClass {
    private static readonly string CookieName;

    static YourSurroundingClass() {
        CookieName = "TempData" + DateTime.Now.Ticks
            .ToString();
    }
}

【讨论】:

  • 每次访问都会产生新值时会再次出现
  • 不,不会的。静态构造函数只会运行一次。或者您的意思是即使您的程序重新启动,您也希望它保持不变?为此,您需要写入文件。 @Md.ParvezAlam
【解决方案2】:

如果您只将变量定义为get,那么您可以在类的构造函数中设置它,但之后就不能再更改它了。

public class MyClass
{
   private string CookieName { get; }

   public MyClass()
   {
      CookieName = "TempData" + DateTime.Now.Ticks.ToString();
   }
}

【讨论】:

    【解决方案3】:

    确实,您总能获得新的价值。但是,解决方法是您可以根据需要将值存储在数据库或文件中。

    联系我。如果需要更多说明。 I am available here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2015-08-23
      • 2021-10-23
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多