2016-10-02 70 views
0

我想调试一些具有方法CalculateTuition的代码,并将其中一个参数命名为credits。我在运行时遇到的错误是“可选参数必须出现在所有必需参数之后”。 这个应用程序的目的是为了演示一个方法可以用一个,两个或三个参数来调用。我无法弄清所需参数和可选参数之间的差异。感谢您的时间!可选参数必须满足所有要求后才会出现

public static void Main() 
{ 
    Console.WriteLine("Tuition is {0}", Calculatetuition(15)); 
    Console.WriteLine("Tuition is {0}", CalculateTuition(15, 'O')); 
    Console.WriteLine("Tuition is {0}", CalculateTuition(15, 'O', true)); 
} 


public static double CalculateTuition(string code = "I", double credits, 
     bool scholarship = false) 
{ 
    double tuition; 
    const double RATE = 80.00; 
    const double OUT_DISTRICT_FEE = 300.00; 

    tuition = credits * RATE; 
    if (code == 'I') 
     tuition += OUT_DISTRICT_FEE; 
    if (scholarship) 
     tuition = 0; 
    return tuition; 
} 
+0

当您为参数的默认值 - 它定义为“可选”。可选参数必须在所有“必需”参数后声明 – Fabio

+0

备注:* run-time *时出现此错误,显示代码 - ether post没有显示真实代码或者存在一些混淆“运行时间”和“编译时”。您也可以考虑在MSDN上阅读[命名参数和可选参数](https://msdn.microsoft.com/en-us/library/dd264739.aspx)。 –

回答

2
public static double CalculateTuition(string code = "I", double credits, bool scholarship = false) 

code这里是一个可选参数。如果呼叫方未提供code的值,则其默认值为"I"。但是,由于错误状态,可选参数不得在必需参数之前。更改方法签名(并相应更新用法)到:

public static double CalculateTuition(double credits, string code = "I", bool scholarship = false) 

或做code必需的参数

public static double CalculateTuition(string code, double credits, bool scholarship = false) 
+0

请注意,OP说“在运行时” - 虽然你的解释是正确的,但它没有解决这个问题的奇怪部分。 –