C# 在c中“动态”更改静态变量

C# 在c中“动态”更改静态变量,c#,asp.net,.net,C#,Asp.net,.net,我在下面的课程中设置了什么语言应该是网站上的运行语言。现在我只是在运行/调试我的项目之前输入/输出我想要选择的语言 我想能够改变语言动态,而我的网站正在运行。你会怎么做呢?我想避免使用会话参数或cookie来解决这个问题,这些参数或cookie将在将来某个日期用完 public class LanguageCodes { public const string DenmarkCode = "DK"; public const string SwedenCode = "SE"; }

我在下面的课程中设置了什么语言应该是网站上的运行语言。现在我只是在运行/调试我的项目之前输入/输出我想要选择的语言

我想能够改变语言动态,而我的网站正在运行。你会怎么做呢?我想避免使用会话参数或cookie来解决这个问题,这些参数或cookie将在将来某个日期用完

public class LanguageCodes
{
    public const string DenmarkCode = "DK";
    public const string SwedenCode = "SE";
}

public class LanguageFactory
{
    public static readonly string CurrentLanguage =
     LanguageCodes.DenmarkCode; 
   //LanguageCodes.SwedenCode;

    public static AbstractLanguage Current {
        get {
            switch (CurrentLanguage)
            {
                case LanguageCodes.DenmarkCode: return new LanguageDK();
                case LanguageCodes.SwedenCode: return new LanguageSE();
            }
            return null;
        }
    }

在当前的实现中,您不能这样做

const是编译已知变量,即使使用反射也无法编辑

唯一的方法是编写一个可以编辑自己的源代码并重新编译自己的程序。我想你不想那样做

不管你怎么玩

Thread.CurrentThread.CurrentCulture=新文化信息BR

如果要保持实现不变,请将const更改为static


事实上,我今天看到了这种可能会有所帮助的方式:

 private const string someString="my name is {0}";

 string newString = string.Format(someString, "Didi");

这已经通过.NET本身在请求线程的CurrentCulture和CurrentUICulture属性中可用。这些属性控制加载哪些资源字符串、数字和日期的格式和解析方式。另一方面,如果不使用会话或Cookie,对静态变量的更改将应用于所有用户。为什么要更改网站?客户端应在请求中指定语言或从客户端获取默认区域性。请检查Rick Strahl的。它显示了如何使用各种技术(自动或从用户配置文件)设置语言。在文档中,解释了这些东西如何在ASP.NET核心中工作。这些概念类似于ASP.NET WebForms或MVC,因此值得一读,但我的所有语言属性都存储在我自己的类中-我不使用自定义的.NET语言类。我只是在做这个:公共类语言dk:抽象语言{public override string BeskedSkalUdfyldes=>beskedskal udfyldes。;所以我想我不能使用Thred.CurrentThread.CurrentCulture?或者?因此,在不使用常量的情况下将类型更改为Static。@NickDeveloper为什么要尝试重新发明轮子?除非更改CurrentCulture和CurrentUICulture设置,否则无法修改语言。没有无论您的类做什么,字符串都将使用线程的CurrentCulture进行格式化。UI字符串将使用CurrentUICulture生成。这在每个ASP.NET堆栈的文档中都有介绍-Webforms、MVC、ASP.NETCore@Sebastian506563如果我理解正确的话,Op并没有试图修改DenmarkCode或SwedenCode,毕竟,他们是共同的nstant,与当前ui语言无关,但CurrentLanguage声明为只读,因此出现类似问题是将我的类转换为本机.net语言/区域性类的唯一解决方案?或者我可以通过删除const来修复它吗?然后我可以动态更改CurrentLanguage变量指向的内容吗?您能解释一下吗编辑您的答案这如何帮助OP解决语言问题?
 private const string someString="my name is {0}";

 string newString = string.Format(someString, "Didi");