2017-01-23 9 views
0

メソッドを使用して設定したい変数があります。メソッドを介した変数の設定

string size 
double sizeprice 

これは、メソッドは

PizzaSizeUI(choice, size, sizeprice, Quit); 

と呼ばれている場所ですが、私はこの方法自体から来た値を印刷してきた、と彼らは設定されているあるコード

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; 
     } 




    } 

ですしかし、外の値は「選択されていません」と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); 
2

あなたのコードは、1つの小さなピースにいくつかのコードの匂いの例です。あなたがvoidメソッドを呼び出すcase

  • を使用しますが、バックの結果を期待すべきときifを使用して

    1. (CQSの続きを読む)
    2. として使用される値の型を期待ロジック
    3. と「UI」を組み合わせます参照型

    少なくとも、あなたのメソッドは返す何かを取得するためには、 sult。 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)); 
         } 
        } 
    } 
    
  • 関連する問題