【发布时间】:2015-03-29 12:52:09
【问题描述】:
我有一个简单的方法可以检查特定对象的布尔属性有多少是真的。如果只有一个属性为真,它将返回相关字符串。但是,如果多个属性为 true,则返回 null。
public class HobbieSelector
{
public bool Football { get; set; }
public bool Tennis { get; set; }
public bool Hockey { get; set; }
public bool Basketball { get; set; }
public bool Baseball { get; set; }
}
public string GetSelectedHobbie(HobbieSelector hobbie)
{
var selectedHobbie = string.Empty;
var count = 0;
if(hobbie.Football)
{
selectedHobbie = "Football";
count++;
}
if(hobbie.Tennis)
{
selectedHobbie = "Tennis";
count++;
}
if(hobbie.Hockey)
{
selectedHobbie = "Hockey";
count++;
}
if(hobbie.Basketball)
{
selectedHobbie = "Basketball";
count++;
}
if(hobbie.Baseball)
{
selectedHobbie = "Baseball";
count++;
}
return count == 1 ? selectedHobbie : null;
}
这段代码会运行多次,效率是最重要的。所以我只是想知道是否有任何更快更有效的方法来检查这个?
【问题讨论】:
-
老实说,在我看来,枚举会更合适......如果有人传入选择器同时选择了“足球”和“网球”,为什么它应该返回 null?对我来说,这似乎是一个非常奇怪的设计。
-
你的代码有一个明显的低效率。您一遍又一遍地将变量“selectedHobbie”设置为一个字符串,但如果选择了多个爱好,您将忽略所有设置工作并返回 NULL。它只是一个指针集,这并不可怕,但它不是“效率至上”
标签: c#