根据Switch语句获取值

时间:2015-04-27 23:51:31

标签: c# .net wpf

是否可以根据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;
        }                
    }
}

所以上面的代码应该根据基于它的字符串类型返回一个值。

3 个答案:

答案 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无需更改。