Могу ли я сделать выражение linq необязательным параметром в c # 4.0?

#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. Понимание того, как перегружать и переопределять методы, является прекрасным