我有此代码:
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();
答案 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;