#c#-4.0 #optional-parameters
#c #-4.0 #необязательно-параметры
Вопрос:
У меня есть следующий код.
public void GetMessages(Expression<Func<IMessageQueryable, bool>> messageSpecification, string folder = "INBOX")
{
// Implementation stripped
}
Как я могу предоставить значение по умолчанию для messageSpecification
?. В спецификации указано, что значение должно быть константой времени компиляции. Возможно ли это?.
РЕДАКТИРОВАТЬ: Не ищется указание его как Expression<Func<IMessageQueryable, bool>> messageSpecification = null
Ответ №1:
Вы можете перегрузить его. Каким будет ваше значение по умолчанию?
Ответ №2:
Зачем беспокоиться? Создайте перегрузку для того же метода без параметра messageSpecification и самостоятельно определите его значение по умолчанию внутри перегруженного метода и передайте его вашему исходному методу. Параметры по умолчанию на самом деле никогда не предназначены для использования подобным образом в любом случае.
public void GetMessages(string folder = "INBOX")
{
this.GetMessages(DEFAULT_VALUE, folder);
}
Комментарии:
1. то есть вы хотите сказать, что мой код вонючий и я двигаюсь в неправильном направлении?
2. Определенно, необязательные параметры были разработаны для облегчения взаимодействия с COM-объектами , а не для использования подобным образом. Недостатки необязательных параметров обсуждаются в отделе на многих форумах.
3. Понимание того, как перегружать и переопределять методы, является прекрасным