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

У меня есть следующий код.

public void GetMessages(Expression<Func<IMessageQueryable, bool>> messageSpecification, string folder = "INBOX")
{
    // Implementation stripped           
}

Как я могу указать значение по умолчанию для messageSpecification?. Спецификация говорит, что значение должно быть константой времени компиляции. Это возможно?.

РЕДАКТИРОВАТЬ: Не ищите указание его как Expression<Func<IMessageQueryable, bool>> messageSpecification = null


person suhair    schedule 21.04.2011    source источник


Ответы (2)


Зачем беспокоиться? Создайте перегрузку для того же метода без параметра messageSpecification и самостоятельно определите его значение по умолчанию внутри перегруженного метода и передайте его исходному методу. Параметры по умолчанию на самом деле никогда не предназначены для такого использования.

public void GetMessages(string folder = "INBOX")
{
    this.GetMessages(DEFAULT_VALUE, folder);        
}
person Teoman Soygul    schedule 21.04.2011
comment
так вы имеете в виду, что мой код вонючий, и я иду в неправильном направлении? - person suhair; 21.04.2011
comment
Определенно, необязательные параметры были разработаны для облегчения взаимодействия с COM-объектами, а не для использоваться так. Недостатки необязательных параметров обсуждаются на многих форумах. - person Teoman Soygul; 21.04.2011
comment
Понимание того, как использовать методы OverLoad и OverRide, — это красота. - person SQLMason; 21.04.2011

Вы можете перегрузить его. Каким будет ваше значение по умолчанию?

person SQLMason    schedule 21.04.2011