将多个if语句转换为简短语句

sto*_*tom 0 .net c# if-statement

我试图string根据boolean属性值进行逗号分隔model.

        string options = string.Empty;

        if (model.Fruits.Value)
        {
            options += "FR,";
        }
        if (model.Drinks.Value)
        {
            options += "DR,";
        }
        if (model.Lunch.Value)
        {
            options += "LU,";
        }
        if (model.Dinner.Value)
        {
            options += "DI,";
        }
Run Code Online (Sandbox Code Playgroud)

我们可以使上面的代码基于简写,使用ternary conditional operator (?:)或者我应该保留上面的代码,因为它更具可读性?

任何建议都会很棒.

Mar*_*ell 5

一种方法可能有一些优点:

    string options = 
        (model.Fruits.Value ? "FR," : "")
        + (model.Drinks.Value ? "DR," : "")
        + (model.Lunch.Value ? "LU," : "")
        + (model.Dinner.Value ? "DI," : "");
Run Code Online (Sandbox Code Playgroud)

具体来说,这将是一次调用string.Concat(参见此处的示例 - 您正在寻找单个call string [mscorlib]System.String::Concat(string, string, string, string)),因此它将避免+="所有选项"场景中的大量中间字符串().但是,坦率地说,我建议使用[Flags] enum替代,即

[Flags]
enum FoodOptions {
    None = 0,
    Fruits = 1,
    Drinks = 2,
    Lunch = 4,
    Dinner = 8,
}

var options = FoodOptions.None;
if(model.Fruits.Value) options |= FoodOptions.Fruits;
if(model.Drinks.Value) options |= FoodOptions.Drinks;
if(model.Lunch.Value) options |= FoodOptions.Lunch;
if(model.Dinner.Value) options |= FoodOptions.Dinner;
Run Code Online (Sandbox Code Playgroud)

这只是整数.