繁体   English   中英

将多个if语句变为短语句

[英]Make multiple if statements into short statements

我正在尝试根据model中的boolean属性值创建一个逗号分隔的string

        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,";
        }

我们是否可以使用ternary conditional operator (?:)使上述代码基于速记方式,还是因为它更具可读性,所以我还是应该保留上面的代码吗?

任何建议都很好。

这种方法可能有一些优点,例如:

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

具体来说,这将是对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;

整个都是整数。

稍微升级您的代码。 认为它可能会帮助您。

using System;
using System.Text;

public class Program
{
public static void Main()
{
       StringBuilder options = new StringBuilder();
    Food model= new Food();


    if (model.Fruits.HasValue)
    {
        options.Append("FR,");
    }
    if (model.Drinks.HasValue)
    {
        options.Append("DR,");
    }
    if (model.Lunch.HasValue)
    {

        options.Append("LU,");
    }
    if (model.Dinner.HasValue)
    {
        options.Append("DI,");
    }
    Console.WriteLine(options);
}
}

public class Food{
public int? Fruits{get;set;}
public int? Drinks{get;set;}
public int? Lunch{get;set;}
public int? Dinner{get;set;}

public Food(){
    Fruits=1;
    Drinks=null;
    Lunch=2;
    Dinner=3;
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM