无法为int分配值

时间:2015-09-11 00:03:16

标签: c#

我无法为int PlanPrice 分配值。我已经删除了很多代码,但是当用户按下键时," a"调用AddCustomer函数,他们可以输入大量数据,这些数据可以毫无问题地保存。但是在 AddCustomer 功能结束时,我使用开关来确定当前计划的价格。但是当我尝试在此函数返回Main之后使用 PlanPrice int时,该值始终为0.我可以看到在AddCustomer函数中实际上已分配了值,但是当我去回到 Main 中的开关,由于某种原因,保持在0,尽管AddCustomer中用户的所有其他数据实际上都保存并正常工作..

主:

int PlanPrice = 0;
...
switch (menuSelection)
{
     case "a": AddCustomer(..., PlanPrice); break;
     case "c": CalculatePayment(..., PlanPrice); break; //Displays 0
     ...
     case "z": Console.WriteLine(PlanPrice); break; //Displays 0
}

AddCustomer:

static void AddCustomer(..., int PlanPrice)
{
     ...
     Console.Write("Current Plan (S, M, L or XL): ");
     currentPlan[arrayLength] = Console.ReadLine();
     switch (currentPlan[arrayLength]) 
     {
         case "S": { planPrice = 55; } break;
         case "M": { planPrice = 70; } break;
         case "L": { planPrice = 95; } break;
         case "XL": { planPrice = 135; } break;
         default:
         {
             Console.WriteLine("\nSorry, you can only enter S, M, L or XL\n");  
         }
     }
}

2 个答案:

答案 0 :(得分:4)

如果您的方法需要修改参数,则必须将其标记为outref

static void AddCustomer(..., out int PlanPrice)
{
}

答案 1 :(得分:3)

选项1

通过refout

传递PlanPrice
  

out关键字导致参数通过引用传递。这是   像ref关键字一样,除了ref要求变量是   在传递之前初始化。要使用out参数,请同时使用   方法定义和调用方法必须明确使用out   关键字。

所以在您的情况下,out更适合

static void AddCustomer(..., out int PlanPrice)
{
   ... 
}

选项2

由于您的AddCustomer是静态的,您可以使用的另一种替代方法是将PlanPrice设为static,然后您不需要PlanPrice参数AddCustomer

static int PlanPrice;

static void AddCustomer(...)
{
   //PlanPrice is accessible here, because it is static and your method is static too.
}