我想通过方法设置变量。
string size
double sizeprice
这是代码
public static void PizzaSizeUI(int choice, string size, double sizeprice, bool Quit){
Console.WriteLine("Size");
Console.WriteLine("1.Small");
Console.WriteLine("2.Medium");
Console.WriteLine("3.Large");
//To Check if Int is entered, If a character / string is entered, program doesn't crash.
while (!int.TryParse(Console.ReadLine(), out choice))
{
break;
}
if (choice == 1)
{
size = "Small";
sizeprice = 5.00;
Quit = true;
}
else if (choice == 2)
{
size = "Medium";
sizeprice = 7.00;
Quit = true;
}
else if (choice == 3)
{
size = "Large";
sizeprice = 10.00;
Quit = true;
}
}
这就是调用方法的地方
PizzaSizeUI(choice, size, sizeprice, Quit);
我已经打印了来自方法本身的值,并且已经设置了它们,但外部值仍然按原样设置,"未选择"和0。 如何通过方法设置变量?
答案 0 :(得分:3)
您只是更改方法内的值。您没有给变量指定',而是复制它们(或者复制它们的引用,具体取决于类型)。
为了完成这项工作,您应该使用ref
传递变量,或者如果只有输出,则应标记out
:
public static void PizzaSizeUI(out int choice, out string size, out double sizeprice, out bool Quit){
并使用out
调用它们:
int choice;
string size;
double sizeprice;
bool Quit;
PizzaSizeUI(out choice, out size, out sizeprice, out Quit);
答案 1 :(得分:2)
你的代码是一个小块中几个代码味道的例子。
if
时应使用case
void
方法但期望返回结果(在CQS上阅读更多内容)至少,您的方法应返回某些内容,以便您获得结果。有些人可能会建议使用ref
或out
值类型参数,但我强烈反对你这样做。
相反,你需要创建这样的东西:
public enum PizzaSize
{
Small,
Medium,
Large
}
public struct PizzaDetails
{
public PizzaDetails(int choice, PizzaSize size, double price)
{
Choice = choice;
Size = size;
Price = price;
}
int Choice { get; set; }
PizzaSize Size { get; set; }
double Price { get; set; }
}
public class PizzaChoice
{
public PizzaDetails GetPizzaDetails(int choice)
{
switch (choice)
{
case 1:
return new PizzaDetails(choice, PizzaSize.Small, 5);
case 2:
return new PizzaDetails(choice, PizzaSize.Medium, 7);
case 3:
return new PizzaDetails(choice, PizzaSize.Large, 10);
default:
throw new ArgumentOutOfRangeException("Invalid choice", nameof(choice));
}
}
}