我有一些功能,我可以使用方法重载/链接实现,但我想知道我是否可以使用可选参数实现相同的功能。这是我想要实现的一个示例,下面是一个带方法链接的版本(希望这会使我的意图明确)。可以使用可选参数完成吗?
// 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参数派生出默认值(如果您没有给我一个特定的电子邮件,我将只使用列表中的第一个)。可选参数的默认值是否必须是静态的,还是像我的例子中的表达式的结果?如果他们可以,那么正确的语法是什么?
答案 0 :(得分:8)
参数的默认值必须是编译时常量。你可以做的是,使默认值为null,然后在函数中设置它:
private string CreateMessageFromTemplate(string templateId, Contact contact, string email = null)
{
email = email ?? contact.emails.FirstOrDefault())
...
}