如何将具有新 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
我有这个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