1

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

// 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 参数派生了默认值(如果您不给我特定的电子邮件,我将只使用列表中的第一个)。可选参数的默认值是否必须是静态的,或者它们可以是像我的示例中那样的表达式的结果?如果可以,正确的语法是什么?

4

1 回答 1

8

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

private string CreateMessageFromTemplate(string templateId, Contact contact, string email = null)
{
    email = email ?? contact.emails.FirstOrDefault()) 
    ... 
}
于 2013-07-10T21:51:40.970 回答