【问题标题】:Optional parameters must appear after all requirements are met [duplicate]满足所有要求后必须出现可选参数[重复]
【发布时间】:2016-10-02 23:40:49
【问题描述】:

我正在尝试调试一些具有方法 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;
}

【问题讨论】:

  • 当您为参数提供默认值时 - 它定义为“可选”。可选参数必须在所有“必需”参数之后声明
  • 旁注:此错误不会发生在 run-time 并显示代码 - ether post 未显示真实代码或“运行时”存在一些混淆和“编译时”。您也可以考虑阅读 MSDN 上的 Named and Optional arguments

标签: c#


【解决方案1】:
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)

【讨论】:

  • 请注意,OP 说“在运行时” - 虽然您的解释是正确的,但它并没有解决问题的那个奇怪部分。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多