将枚举传递给函数是行不通的

时间:2016-10-14 05:02:22

标签: c# .net enums

我正在尝试将枚举传递给我的方法,这就是我的尝试方式:

public enum Pizza
    {
        [Description("Peeporoni")]
        Peeporoni = 1,
        [Description("Maxican")]
        Maxican = 1,
       [Description("Cheese")]
        Cheese = 2
    }

public static string GetType(Pizza pizza)
        {
            switch (pizza)
            {
                case pizza.:   //not getting any thing
                    return pizza.;

                case pizza.:
                    return pizza.
            }
        }

现在我想调用GetType方法并将特定类型的披萨传递给此方法:

GetType(Pizza.Peeporoni);  //should return Pepporoni
GetType(Pizza.Maxican);  //should return Maxican

我也从Reference下面尝过这样的方法,但它仍无法正常工作:

public static string GetType(Enum pizza)
        {
            switch (pizza)
            {
                case pizza.:   //not getting any thing
                    return pizza.;

                case pizza.:
                    return pizza.
            }
        }

更新

我这样做但我不想这样做,因为我从很多地方调用GetType方法,所以如果在比萨饼名称中进行任何更改,那么我必须在每个地方找到并更改:

public static string GetType(string pizza)
        {
            switch (pizza)
            {
                case "Peeporoni":   //not getting any thing
                    return "Peeporoni";

                case "Cheese":
                    return "Cheese";
            }
        }

GetType("Peeporoni");  //return Pepporoni
GetType("Cheese");  //return Maxican

目标

我的目标是以这样一种方式创建这个过程:如果有一天任何变化都会以像 Peeporoni变成Pepparoniz 这样的披萨的名义出现,那么我只需要在一个地方更改它。

2 个答案:

答案 0 :(得分:3)

就像我解释这是糟糕的编码,你应该为每个披萨都有单独的对象。这个对象应该实现通用接口。

public interface IPizza
{
    //just example method
    public int Price();
    public string Name{ get; set; };
}

public class Peperoni: IPizza
{
    private string _name = "Peperoni Pizza";
    public int Price()
    {
         return 10;
    }

    public string Name
    {
        get { return _name;}
        set { _name=value;}
    }
}

public class Cheese: IPizza
{
    private string _name = "Cheese Pizza";

    public int Price()
    {
         return 8;
    }

    public string Name
    {
        get { return _name;}
        set { _name=value;}
    }
}

// and so on

当用户想要peperoni时

 IPizza peperoniPizza = new Peperoni();
 Console.WriteLine(peperoniPizza.Name);

如果用户想要带有salam的peperoni

,这会给你灵活性
 IPizza peperoniPizzaNoSalami = new Peperoni();
 peperoniPizzaNoSalami.Name = "Peperoni pizza without salam";

另外举个例子,如果你有一个类DeliveryComapny并且他们有方法IsPizzaDelivered。您可以重复使用本课程中的每一个披萨。

 public void IsPizzaDelivered(IPizza pizza)
 {
      //you should have IsDelivered property in IPizza for this
      //after some actions here you set it to true or false.

      //you can take the dependencyof the IPizza in the constructor of your Delivery company too.
 }

答案 1 :(得分:2)

问题在于您在代码中使用的选择案例,您必须在案例中指定枚举类型,或者如果您要与字符串进行比较,那么您必须提供switch (pizza.ToString())

我希望您尝试实现以下目标:

public static string GetType(Pizza pizza)
{
    switch (pizza)
    {
        case Pizza.Peeporoni:
            return Pizza.Peeporoni.ToString();
        case Pizza.Maxican:
            return Pizza.Maxican.ToString();
        case Pizza.Cheese:
            return Pizza.Cheese.ToString();    
        default:
            return "";
    }
}

因此,当您按以下方式调用此方法时:

Pizza pizza =Pizza.Cheese;
string pizaType = GetType(pizza);

您将获得pizaType="Cheese"

如果您正在寻找一个接受字符串并返回相应披萨类型的方法,则意味着您可以修改方法签名,如下所示:

public static Pizza GetType(string pizza)
{
    switch (pizza)
    {
        case "Peeporoni":
            return Pizza.Peeporoni;
        case "Cheese":
            return Pizza.Cheese;
        default:
            return Pizza.Maxican;
    }
}

现在您可以像这样调用此方法:

 Pizza pizza = GetType("Peeporoni"); // which will give you the type as `Pizza.Peeporoni`