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

如何将具有新C#6.0字符串插值的属性值更改为新的引用值?,c#,.net,datetime,string-interpolation,c#-6.0,C#,.net,Datetime,String Interpolation,C# 6.0,我有这门课 public static class DateFormat { public static string separator= "-"; public static string DateFormat24H { get; set; } = $"yyyy{separator}MM/dd HH:mm:ss"; } 现在,在24小时内调用DateFormat24时,它将打印yyyy-MM/dd。现在更改分隔符变量 DateFormat.separator=“/”日期格式

我有这门课

public static class DateFormat
{
    public static string separator= "-";
    public static string DateFormat24H { get; set; } = $"yyyy{separator}MM/dd HH:mm:ss";
}
现在,在24小时内调用DateFormat24时,它将打印yyyy-MM/dd。现在更改分隔符变量

DateFormat.separator=“/”日期格式24小时仍然相同yyyy MM/dd


字符串插值仅在第一次初始化时指定?所以每次访问变量都将使用指定的旧字符串插值?或者我错了。或者我错过了什么?

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

其次,以下属性是一个自动实现的属性,您可以认为它就像在构造函数中设置它一样,不再重新计算它

public static string DateFormat24H { get; set; } = $"yyyy{separator}MM/dd HH:mm:ss";
最后,您最可能需要的是实现只读属性的表达式体定义。看起来像这样

public static string DateFormat24H => $"yyyy{separator}MM/dd HH:mm:ss";
每次调用它时,它都会重新评估插值

更新

你看到你最后的帖子了。请给出完整的使用示例 收到设置这两种方法都适用于评估分离器。并设置属性。我 意思是使用背景字段或类似屏幕截图的东西。prnt.sc/q22q0r 请原谅我

使用插值无法完成此操作,您需要使用
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

最后我喜欢,它很有效,我从来没有想过。但是为什么自动实现的属性不重新评估?@asdk1200000因为它们被初始化了一次又一次。如果我需要获取和设置,该怎么办?抱歉,但为什么这不起作用??设置的值必须包含在get中。因此,将再次对其进行评估。但请看截图。输出是相同的。@asdk1200000您不能这样做,您不能保存插值以在以后的getter中进行计算,这种getter是可变的。它将在其设置时进行评估。