我正在尝试将枚举传递给我的方法,这就是我的尝试方式:
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 这样的披萨的名义出现,那么我只需要在一个地方更改它。
答案 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`