[英]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.