Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 通过方法设置变量_C# - Fatal编程技术网

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上的更多信息)
  • 将“UI”与逻辑相结合
  • 期望值类型用作引用类型
  • 至少,您的方法应该返回一些东西,以便您获得结果。有些人可能建议使用
    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上的更多信息)
  • 将“UI”与逻辑相结合
  • 期望值类型用作引用类型
  • 至少,您的方法应该返回一些东西,以便您获得结果。有些人可能建议使用
    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));
            }
        }
    }