Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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# 在这种情况下,我可以使用ENUM而不是带有ENUM的switch语句吗?_C# - Fatal编程技术网

C# 在这种情况下,我可以使用ENUM而不是带有ENUM的switch语句吗?

C# 在这种情况下,我可以使用ENUM而不是带有ENUM的switch语句吗?,c#,C#,我在我的应用程序中使用了枚举和扩展,如下所示: public enum CO { Random = 0, FirstToLast = 1,     LastToFirst = 2, } public static partial class Extensions { public static string Text(this CO cardOrder) { switch (cardOrder) { ca

我在我的应用程序中使用了枚举和扩展,如下所示:

public enum CO
{
    Random = 0,
    FirstToLast = 1,
    LastToFirst = 2,
}

public static partial class Extensions
{
    public static string Text(this CO cardOrder)
    {
        switch (cardOrder)
        {
            case CO.Random: return "Random";
            case CO.FirstToLast: return "1, 2, 3";
            case CO.LastToFirst: return "3, 2, 1";
        }
        return "";
    }
}
在代码中,我将switch语句设置为决定更新数据库:

switch (segControlCardOrder.SelectedValue)
{
   case "Random":
         App.DB.UpdateIntSetting(SET.Co, (int)CO.Random);
         break;
   case "1, 2, 3":
         App.DB.UpdateIntSetting(SET.Co, (int)CO.FirstToLast);
         break;
   case "3, 2, 1":
         App.DB.UpdateIntSetting(SET.Co, (int)CO.LastToFirst);
         break;
}

有没有一种方法可以避免使用switch语句,而只根据枚举的值调用UpdateIntSettings?

您可以将
字典初始化为类的私有或静态成员:

dict.Add("Random", CO.Random);
dict.Add("1, 2, 3", CO.FirstToLast);
dict.Add("3, 2, 1", CO.LastToFirst);
最后要做的是:

App.DB.UpdateIntSetting(Set.CO, (int)dict[segControlCardOrder.SelectedValue]);

您可以将
字典
初始化为类的私有或静态成员:

dict.Add("Random", CO.Random);
dict.Add("1, 2, 3", CO.FirstToLast);
dict.Add("3, 2, 1", CO.LastToFirst);
最后要做的是:

App.DB.UpdateIntSetting(Set.CO, (int)dict[segControlCardOrder.SelectedValue]);

是的,但效率较低。您可以使用值字典,如:

var dict = new Dictionary<string, CO> { ["Random"] = CO.Random, ["1, 2, 3"] = CO.FirstToLast, ["3, 2, 1"] = CO.LastToFirst };
App.DB.UpdateIntSetting(SET.Co, (int)dict[segControlCardOrder.SelectedValue]);
var dict=newdictionary{[“Random”]=CO.Random,[“1,2,3”]=CO.FirstToLast,[“3,2,1”]=CO.LastToFirst};
App.DB.UpdateIntSetting(SET.Co,(int)dict[segControlCardOrder.SelectedValue]);

或者简单地将值设置为在变量中使用,并将其传递给方法。我喜欢最后一种方式。

是的,但效率较低。您可以使用值字典,如:

var dict = new Dictionary<string, CO> { ["Random"] = CO.Random, ["1, 2, 3"] = CO.FirstToLast, ["3, 2, 1"] = CO.LastToFirst };
App.DB.UpdateIntSetting(SET.Co, (int)dict[segControlCardOrder.SelectedValue]);
var dict=newdictionary{[“Random”]=CO.Random,[“1,2,3”]=CO.FirstToLast,[“3,2,1”]=CO.LastToFirst};
App.DB.UpdateIntSetting(SET.Co,(int)dict[segControlCardOrder.SelectedValue]);

或者简单地将值设置为在变量中使用,并将其传递给方法。我更喜欢最后一种方法。

您也可以为另一种方法添加扩展方法(从字符串到枚举)。然后,您可以使用语句中的方法:

public static CO CardOrder(this string cardOrder)
{
    switch (cardOrder)
    {
        case "Radom": return CO.Random;
        case "1, 2, 3": return CO.FirstToLast;
        case "3, 2, 1":  return CO.LastToFirst;
    }
    throw new ArgumentException(string.Format($"{cardOrder} is not a CO representation"));
}
简单使用:

App.DB.UpdateIntSetting(SET.Co, (int)segControlCardOrder.SelectedValue.CardOrder());

您还可以以另一种方式添加扩展方法(从字符串到枚举)。然后,您可以使用语句中的方法:

public static CO CardOrder(this string cardOrder)
{
    switch (cardOrder)
    {
        case "Radom": return CO.Random;
        case "1, 2, 3": return CO.FirstToLast;
        case "3, 2, 1":  return CO.LastToFirst;
    }
    throw new ArgumentException(string.Format($"{cardOrder} is not a CO representation"));
}
简单使用:

App.DB.UpdateIntSetting(SET.Co, (int)segControlCardOrder.SelectedValue.CardOrder());

您似乎已经在将枚举值传递到UpdateIntSetting方法中,因此您当然不需要从扩展方法获取字符串,然后在交换机中使用,而是可以将该枚举传递到方法中。很难说这是否对你有用,因为你不清楚你是否真的在调用第二个开关语句的时候有EnUM值。考虑使用一个针对枚举的属性来存储字符串。你似乎已经将EnUM值传递到UpDeDeTeNeTew方法,所以它肯定感觉你不需要。从扩展方法中获取字符串,然后在开关中使用,但可以将该枚举传递到方法中。很难说这是否对你有用,因为你不清楚你是否真的在调用第二个开关语句的时候有EnUM值。考虑使用一个针对枚举的属性来存储字符串。这是一个很好的实践,尤其是当你发现自己重用同一个开关语句的时候。这会更快,如果您想添加更多的案例,只需在一个位置添加它们,其余的用法就不需要更改。这是一个非常好的实践,尤其是当您发现自己重用了相同的switch语句时。它更快,如果你想添加更多的案例,你只需要在一个位置添加它们,其余的用法就不需要更改。