Как использовать Func <T, bool> в качестве параметра для Func <объект, bool>? - PullRequest
3 голосов
/ 19 декабря 2011

У меня есть метод с объявлением, как это:

public void OriginalMethod(Func<object,bool> selector)

И я хотел бы вызвать его из универсального метода, который имеет объявление вроде этого:

public void GenericMethod<T>(Func<T, bool> selector)

Как мне это сделать?

Ответы [ 3 ]

6 голосов
/ 19 декабря 2011

Вы не можете передать selector напрямую OriginalMethod: он ожидает метод, который принимает любой object, но Func<T, bool> принимает только объект типа T.

Конечно, вы можете обмануть:

OriginalMethod(o => selector((T)o));

Но если OriginalMethod вызовет метод с объектом, который не может быть преобразован в T, произойдет сбой ...

3 голосов
/ 19 декабря 2011
OriginalMethod(arg => selector((T)arg));
3 голосов
/ 19 декабря 2011

Вам нужно создать Func<object, bool>, который вызывает введенный набранный номер.

public void GenericMethod<T>(Func<T, bool> selector)
{
    Func<object, bool> untypedSelector = (object obj) => selector((T)obj);

    OriginalMethod(untypedSelector);
}

Либо, как указано выше, либо однострочный, как Ответ Марка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...