Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于Switch语句获取值_C#_.net_Wpf - Fatal编程技术网

C# 基于Switch语句获取值

C# 基于Switch语句获取值,c#,.net,wpf,C#,.net,Wpf,是否可以基于C中的switch语句获取值 public int NumCandyBars (string candyBar) { get { switch (candyBar) { case "twix": { return _numTwix; } case "snickers": return _numSnickers;

是否可以基于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;
        }                
    }
}
因此,上面的代码应该返回一个基于字符串类型的值

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在此上下文中满足的常量值。

在我看来,您最好避免切换,而使用字典

    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;
    }
像这样:

public int NumCandyBars (string candyBar)
{
    var map = new Dictionary<string, int>()
    {
        { "twix", _numTwix },
        { "snickers", _numSnickers },
        { "kitkat", _numKitKat },
    };

    return map.ContainsKey(candyBar) ? map[candyBar] : 0;
}

或者,您也可以从配置文件中加载数据,或从枚举或数据库中提取数据,并且您的numcandybar无需更改。

您想要这样做的事实是使用多态性!NumCandyBars应该是一个方法还是属性?删除get关键字它应该是一个methodWell,然后删除get关键字
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;
}