使用空合并运算符“ ??”向其自身分配自动实现的属性

问题描述 投票:0回答:2

我有一个采用默认值的自动实现的属性。该属性从数据库读取其值,但是如果该值为null,则应采用其默认值。

    // Variable Declaration
    public bool IsSoundEffects { get; set; } = true;

    // Usage
    bool? readFromDB = null;    // Get it from Database assume its NULL
    IsSoundEffects = readFromDB ?? IsSoundEffects;

如果先前的数据库读取结果为空,是否将IsSoundEffects分配给自身?

使该代码井井有条并易于阅读的诀窍是什么?

c# .net properties nullable null-coalescing-operator
2个回答
1
投票

您在做什么很好。另外,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;

0
投票

简单点

© www.soinside.com 2019 - 2024. All rights reserved.