使用空合并运算符“??”将自动实现的 属性 分配给自身
Assigning auto-implemented property to itself with null coalescing operator "??"
我有一个自动实现的 属性,它采用默认值。 属性 从数据库中读取它的值,但如果它是空的,它应该采用它的默认值。
// Variable Declaration
public bool IsSoundEffects { get; set; } = true;
// Usage
bool? readFromDB = null; // Get it from Database assume its NULL
IsSoundEffects = readFromDB ?? IsSoundEffects;
如果先前的数据库读取结果为空,则将 IsSoundEffects
分配给自己是一种常见做法吗?
应该怎么做才能使这段代码井井有条且易于阅读?
你做的很好。作为替代方案,GetValueOrDefault 也可以。
IsSoundEffects = readFromDb.GetValueOrDefault(IsSoundEffects);
如果您的 readFromDb
确实是一个带有参数的方法,那么这些都是很好的解决方案,因为您可以使用如下所示的简洁语法
IsSoundEffects = readFromDb(some, parameters).GetValueOrDefault(IsSoundEffects);
IsSoundEffects = readFromDb(some, parameters) ?? IsSoundEffects;
在将 ??
运算符引入 C# 之前,前者是您唯一的选择。
如果 "assign to self" 令人反感,则避免初始赋值,并在其他地方明确执行,例如
public bool IsSoundEffects { get; set; }
...
IsSoundEffects = readFromDb(some, parameters).GetValueOrDefault(true);
IsSoundEffects = readFromDb(some, parameters) ?? true;
简单点
if(readFromDB != null) IsSoundEffects = readFromDB;
这样就可以避免在readFromDB为null时赋值相同
我有一个自动实现的 属性,它采用默认值。 属性 从数据库中读取它的值,但如果它是空的,它应该采用它的默认值。
// Variable Declaration
public bool IsSoundEffects { get; set; } = true;
// Usage
bool? readFromDB = null; // Get it from Database assume its NULL
IsSoundEffects = readFromDB ?? IsSoundEffects;
如果先前的数据库读取结果为空,则将 IsSoundEffects
分配给自己是一种常见做法吗?
应该怎么做才能使这段代码井井有条且易于阅读?
你做的很好。作为替代方案,GetValueOrDefault 也可以。
IsSoundEffects = readFromDb.GetValueOrDefault(IsSoundEffects);
如果您的 readFromDb
确实是一个带有参数的方法,那么这些都是很好的解决方案,因为您可以使用如下所示的简洁语法
IsSoundEffects = readFromDb(some, parameters).GetValueOrDefault(IsSoundEffects);
IsSoundEffects = readFromDb(some, parameters) ?? IsSoundEffects;
在将 ??
运算符引入 C# 之前,前者是您唯一的选择。
如果 "assign to self" 令人反感,则避免初始赋值,并在其他地方明确执行,例如
public bool IsSoundEffects { get; set; }
...
IsSoundEffects = readFromDb(some, parameters).GetValueOrDefault(true);
IsSoundEffects = readFromDb(some, parameters) ?? true;
简单点
if(readFromDB != null) IsSoundEffects = readFromDB;
这样就可以避免在readFromDB为null时赋值相同