C# 通过方法设置变量
我想通过一个方法设置变量C# 通过方法设置变量,c#,C#,我想通过一个方法设置变量 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");
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。
如何通过该方法设置变量?您只是在更改该方法内的值。您没有给变量一个“指针”,而是复制它们(或者复制它们的引用,具体取决于类型) 为了实现这一点,您应该使用
ref
在中传递变量,或者如果只有for output,您应该将它们标记为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);
您只是在更改方法内部的值。您没有给变量一个“指针”,而是复制它们(或者复制它们的引用,具体取决于类型) 为了实现这一点,您应该使用
ref
在中传递变量,或者如果只有for output,您应该将它们标记为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);
您的代码是一小段代码中几个代码气味的示例
case时使用if
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));
}
}
}
您的代码是一小段代码中几个代码气味的示例
case时使用if
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));
}
}
}