繁体   English   中英

使用 null 合并运算符“??”将自动实现的属性分配给自身

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM