是否可以将强制变量与NULL结合使用?操作员?

时间:2019-04-26 06:01:50

标签: c#

我有此代码:

public List<Phrase> GetViewablePhrases(MO mode, int pts = 0, bool force = false)
{
    if (force == true) App.selectedPhrases = null;
    App.selectedPhrases = App.selectedPhrases ?? App.DB.GetSelectedPhrases();

我不太了解??的用法?但是我假设这是在说App.selectedPhrases是否为null,然后获取新短语,否则将使用现有短语。

我的函数也有一个force选项,所以我所做的就是使用此行:

if (force == true) App.selectedPhrases = null;

有没有办法将这两行结合起来?

if (force == true) App.selectedPhrases = null;
        App.selectedPhrases = App.selectedPhrases ?? App.DB.GetSelectedPhrases();

4 个答案:

答案 0 :(得分:11)

我将重点放在可读性上:如果force是正确的或我们目前没有任何内容,您想获取新的短语

if (force || App.selectedPhrases == null)
{
    App.selectedPhrases = App.DB.GetSelectedPhrases();
}

虽然您可以使用条件?:运算符和null合并运算符在单个赋值语句中做到这一点,但我认为用if语句来编写它会更清楚明确指出,在其他情况下,您无需进行任何更改。

答案 1 :(得分:2)

即使以下内容可以解决您想要的问题,我也同意乔恩的可读性,因为您应该回答他的问题。


一种方法是使用ternary operator

App.selectedPhrases = (force ? null : App.selectedPhrases) ?? App.DB.GetSelectedPhrases();

关于?? operator

  

??运算符称为空值运算符。如果操作数不为null,则返回左侧的操作数;否则,返回0。否则返回右手操作数。

答案 2 :(得分:2)

我会使用此代码

    if (force || App.selectedPhrases == null) {
        App.selectedPhrases = App.DB.GetSelectedPhrases();
    }

    return App.selectedPhrases;

//编辑:哦,@ rad比我快

答案 3 :(得分:1)

一种可能的方式:

App.selectedPhrases = (force || App.selectedPhrases == null) ? App.DB.GetSelectedPhrases() : App.selectedPhrases;