是否可以根据C#中的switch语句获取值?
public int NumCandyBars (string candyBar)
{
get {
switch (candyBar)
{
case "twix":
{ return _numTwix; }
case "snickers":
return _numSnickers;
case "kitkat":
return _numKitKat;
default: return 0;
}
}
}
所以上面的代码应该根据基于它的字符串类型返回一个值。
答案 0 :(得分:2)
public int NumCandyBars (string candyBar)
{
int retval = 0;
switch (candyBar)
{
case "twix":
retval = _numTwix;
break;
case "snickers":
retval =_numSnickers;
break;
case "kitkat":
retval = _numKitKat;
break;
}
return retval;
}
答案 1 :(得分:1)
public enum CandyBar
{
twix,
snickers,
kitkat
}
public int NumCandyBars (CandyBar candyBar)
{
switch (candyBar)
{
case CandyBar.twix:
return _numTwix;
case CandyBar.snickers:
return _numSnickers;
case CandyBar.kitkat:
return _numKitKat;
default: return 0;
}
}
不一定需要多态,但select需要一个Enum满足的常量值。
答案 2 :(得分:0)
在我看来,你最好避免使用switch
来支持使用字典。
像这样:
public int NumCandyBars (string candyBar)
{
var map = new Dictionary<string, int>()
{
{ "twix", _numTwix },
{ "snickers", _numSnickers },
{ "kitkat", _numKitKat },
};
return map.ContainsKey(candyBar) ? map[candyBar] : 0;
}
这里的优点是map
可以作为字段移出,然后在运行时以编程方式进行修改。
private Dictionary<string, int> map = new Dictionary<string, int>()
{
{ "twix", _numTwix },
{ "snickers", _numSnickers },
{ "kitkat", _numKitKat },
};
public int NumCandyBars (string candyBar)
{
return map.ContainsKey(candyBar) ? map[candyBar] : 0;
}
public void SomeMethod()
{
map["mars"] = 42;
}
或者,您也可以从配置文件加载数据,或从枚举或数据库中提取数据,而NumCandyBars
无需更改。