如何将具有新 C# 6.0 字符串插值的 属性 值更改为新的引用值?

How to change property value that having new C# 6.0 string interpolation to new referenced value?

我有这个class

public static class DateFormat
{
    public static string separator= "-";
    public static string DateFormat24H { get; set; } = $"yyyy{separator}MM/dd HH:mm:ss";
}

现在,当调用 DateFormat24 小时时,它将打印 yyyy-MM/dd。现在更改 分隔符 变量

DateFormat.separator = "/"; DateFormat24H 还是一样 yyyy-MM/dd

字符串插值只在第一次初始化时赋值?那么每次访问变量都会使用分配的旧字符串插值?或者我错了。或者我想念什么?

首先,您当前的代码依赖于您的 class 的安装顺序,幸运的是它是正确的顺序,但这是一个实现细节,可能会更改

其次,下面的属性,是一个自动实现的属性,你可以认为它就像在构造函数中设置一样,它是再也没有重新评估

public static string DateFormat24H { get; set; } = $"yyyy{separator}MM/dd HH:mm:ss";

最后,您最有可能寻找的是实现只读属性 的表达式主体定义。看起来像这样。

public static string DateFormat24H => $"yyyy{separator}MM/dd HH:mm:ss";

每次调用它,它都会重新计算插值

更新

you see your Lastly, post. please can you gave full example of using get; set; both so evaluating the separator. and set the property. i mean using backing field or something like screenshot. prnt.sc/q22q0r Please execuse me about that.

你不能用插值来做到这一点,你需要使用 String.Format 可设置示例 属性

private static string _separator = "/";

private static string _backing = "yyyy{0}MM/dd HH:mm:ss";

public static string DateFormat24H
{
   get => string.Format(_backing, _separator);
   set => _backing = value;
}

用法

Console.WriteLine(DateFormat24H);
_separator = "@";
Console.WriteLine(DateFormat24H);
DateFormat24H = "yyyyMM{0}dd";
Console.WriteLine(DateFormat24H);

输出

yyyy/MM/dd HH:mm:ss
yyyy@MM/dd HH:mm:ss
yyyyMM@dd