Как я могу передать дополнительные параметры предикатным функциям? - PullRequest
6 голосов
/ 20 августа 2010

Могу ли я передать дополнительные параметры в функцию предиката?

Мне это нужно в процессе сортировки.

public void Sort(
    Comparison<T> comparison
)

, где я хотел бы использовать предикат ComparisonФорма:

public delegate int Comparison<T>(
    T x,
    T y,
    object extraParameter
)

Возможно ли это?

Ответы [ 2 ]

5 голосов
/ 20 августа 2010

Нет, но вы можете сделать это:

public Comparison<T> MakeComparison<T>(object extraParameter)
{
    return
        delegate(T x, T y) 
        {
            // do comparison with x, y and extraParameter
        }
}
3 голосов
/ 20 августа 2010

Простой захват переменных, которые вам нужны при объявлении предиката. Например:

int i = 0, j = 10;

array.Sort(x => x > i && x < j ? 1 : -1);
...