C#6.0默认初始化

Hap*_*ird 2 c# initialization properties c#-6.0

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

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

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

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

public String Prefix { get; set; } = "abc_";
Run Code Online (Sandbox Code Playgroud)

我尝试过:

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

但由于当前上下文中不存在名称"value",因此失败

我该如何解决这个错误?

我要做的是将属性设置为"abc_",如果它为null或为空,如果它已经有值,请不要触摸它.

NtF*_*reX 5

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

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

这行代码将设置一个默认值,一旦在初始化,但并不妨碍string.Empty从后beeing设置.

public String Prefix { get; set; } = "abc_";
Run Code Online (Sandbox Code Playgroud)

我要做的是将属性设置为"abc_",如果它为null或为空,如果它已经有值,请不要触摸它.

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

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

  • @HappyBird`value`在该上下文中不是有效的关键字.默认初始化程序在初始化值时设置一次**的默认值**,而不是在设置值时设置.因此,如果您希望每次设置值时都要检查一个例程,那么您必须在setter中执行此操作,就像您已经完成的那样. (2认同)