簡體   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