可选参数的默认值必须是静态的吗?

时间:2013-07-10 21:49:14

标签: c# .net

我有一些功能,我可以使用方法重载/链接实现,但我想知道我是否可以使用可选参数实现相同的功能。这是我想要实现的一个示例,下面是一个带方法链接的版本(希望这会使我的意图明确)。可以使用可选参数完成吗?

// what I would like to do
private string CreateMessageFromTemplate(string templateId, Contact contact, string email = contact.emails.FirstOrDefault()) { ... }

//what I know I can do    
private string CreateMessageFromTemplate(string templateId, Contact contact)
{
     CreateMessageFromTemplate(templateId, contact, contact.emails.FirstOrDefault());
}

private string CreateMessageFromTemplate(string templateId, Contact contact, string email) { ... }

正如您所看到的,我从contact参数派生出默认值(如果您没有给我一个特定的电子邮件,我将只使用列表中的第一个)。可选参数的默认值是否必须是静态的,还是像我的例子中的表达式的结果?如果他们可以,那么正确的语法是什么?

1 个答案:

答案 0 :(得分:8)

参数的默认值必须是编译时常量。你可以做的是,使默认值为null,然后在函数中设置它:

private string CreateMessageFromTemplate(string templateId, Contact contact, string email = null)
{
    email = email ?? contact.emails.FirstOrDefault()) 
    ... 
}