如何将具有新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是可变的。它将在其设置时进行评估。