[英]Assigning auto-implemented property to itself with null coalescing operator “??”
我有一个自动实现的属性,它采用默认值。 此属性从数据库中读取其值,但如果是 null,则应采用其默认值。
// Variable Declaration
public bool IsSoundEffects { get; set; } = true;
// Usage
bool? readFromDB = null; // Get it from Database assume its NULL
IsSoundEffects = readFromDB ?? IsSoundEffects;
如果先前的数据库读取结果为 null,那么将IsSoundEffects
分配给自身是一种通常的做法吗?
应该怎样做才能使这段代码有条理和可读性?
你在做什么很好。 作为替代方案, GetValueOrDefault也可以使用。
IsSoundEffects = readFromDb.GetValueOrDefault(IsSoundEffects);
如果您的readFromDb
确实是一个带参数的方法,那么这两种方法都是很好的解决方案,因为您可以使用如下所示的简洁语法
IsSoundEffects = readFromDb(some, parameters).GetValueOrDefault(IsSoundEffects);
IsSoundEffects = readFromDb(some, parameters) ?? IsSoundEffects;
前者是您在??
运算符被引入 C#。
如果“分配给自己”令人反感,则避免初始分配,并在其他地方明确执行,例如
public bool IsSoundEffects { get; set; }
...
IsSoundEffects = readFromDb(some, parameters).GetValueOrDefault(true);
IsSoundEffects = readFromDb(some, parameters) ?? true;
让它变得简单
if(readFromDB != null) IsSoundEffects = readFromDB;
这样就可以避免在 readFromDB 为 null 时分配相同的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.