C#6.0默认初始化

时间:2017-06-19 10:42:02

标签: c# properties initialization c#-6.0

以下代码在C#5.0中有效:

private static String _prefix;
public static String Prefix
{
    get { return _prefix; }
    set {_prefix = (value == String.Empty) ? "abc_" : value;}
} 

我试图使用默认初始化在C#6中更简洁地编写它。  (https://msdn.microsoft.com/en-us/magazine/dn802602.aspx

以下代码在C#6.0中有效(但逻辑不同)

public String Prefix { get; set; } = "abc_";

我尝试过:

public String Prefix { get; set; } value == String.Empty ? "abc_" : value

但由于名称'值'而失败在当前上下文中不存在

我该如何解决此错误?

我尝试做的是将属性设置为" abc _"如果它为空或空,如果它已经有值,请不要触摸它。

1 个答案:

答案 0 :(得分:5)

此代码不是关于默认初始化,而是关于防止string.Empty设置为初始化后的值。

private static String _prefix;
public static String Prefix
{
    get { return _prefix; }
    set {_prefix = (value == String.Empty) ? "abc_" : value;}
}

此代码行会在初始化时设置默认值一次,但不会阻止string.Empty稍后设置。

public String Prefix { get; set; } = "abc_";
  

我要做的是将属性设置为“abc_”,如果它为null或为空,并且如果它已经有值,则不要触摸它。

简化在c#6中使用的第一个代码的唯一方法是使用表达式主体。并且不仅要检查字符串是否为空,而且如果它为空,则可以使用string.IsNullOrEmpty

private static String _prefix;
public static String Prefix
{
    get => _prefix;
    set => _prefix = string.IsNullOrEmpty(value) ? "abc_" : value;
}