我想创建一个具有可选参数的方法。我写的程序需要这些是DateTime形式。我目前的方法声明是
public void UpdateTable(int month = DateTime.Now.Month, int year = DateTime.Now.Year)
{
// Code here.
}
但是,我收到此错误"'月'的默认参数值必须是编译时常量。"
如何修复此错误?在调用之前,我是否需要在方法之外设置这些值?
答案 0 :(得分:1)
DateTime.Now
都会有所不同 - 因此它不能用作默认值。
解决这个问题的一种方法是使用不同参数计数的重载函数。
public void UpdateTable(int month, int year)
{
// Code here.
}
public void UpdateTable(int month)
{
// fill in the current year
UpdateTable(month, DateTime.Now.Year);
}
public void UpdateTable()
{
// fill in the current month / year
UpdateTable(DateTime.Now.Month, DateTime.Now.Year);
}
答案 1 :(得分:1)
如果您不想事先设置它,我认为您必须传递一组不同的默认值:
public void UpdateTable(int month = -1, int year = -1)
{
if (month == -1) month = DateTime.Now.Month;
if (year == -1) year = DateTime.Now.Year;
}
答案 2 :(得分:0)
你不能这样做。如错误所示,必须在编译时确定可选参数的默认值。
您可以使用nullable type(int?
),如下所示:
public void UpdateTable(int? month = null, int? year = null)
{
month = month ?? DateTime.Now.Month;
year = year ?? DateTime.Now.Year;
// Code here.
}
但我建议制作重载,如下:
public void UpdateTable(int month, int year)
{
// Code here.
}
public void UpdateTable(int month)
{
UpdateTable(month, DateTime.Now.Year);
}
public void UpdateTable()
{
UpdateTable(DateTime.Now.Month, DateTime.Now.Year);
}
答案 3 :(得分:0)
。现在不是常数,因此您不能将其用作默认值。
我建议默认为null,然后如果值为null,则在运行时获取默认值。
public void UpdateTable(int? month = null, int? year = null)
{
month = month ?? DateTime.Now.Month;
year = year ?? DateTime.Now.Year;
// Code here.
}