我无法为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");
}
}
}
答案 0 :(得分:4)
如果您的方法需要修改参数,则必须将其标记为out
或ref
。
static void AddCustomer(..., out int PlanPrice)
{
}
答案 1 :(得分:3)
选项1
传递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.
}