Предикат <T>недоступен в .NET 3.0+ - PullRequest
2 голосов
/ 13 сентября 2009

Предикат доступен где-нибудь в .NET? От MSDN http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx, Я нигде не вижу предиката. Я вижу аноним, который возвращает логическое значение, но не содержит обобщений или ключевое слово "Predicate".

Ответы [ 5 ]

5 голосов
/ 13 сентября 2009

Вместо того, чтобы встроить делегат для предиката, вы можете использовать его как тип, а затем передать его. Вот пример:

var list = new List<int>();
list.AddRange(Enumerable.Range(1, 10));
Predicate<int> p = delegate(int i)
                   {
                      return i < 5;
                   };
list.RemoveAll(p);
list.ForEach(i => Console.WriteLine(i));

РЕДАКТИРОВАТЬ: чтобы объявить предикат с существующим методом, вы должны использовать:

Predicate<int> p = IsLessThanFive;

public bool IsLessThanFive(int number)
{
    return number < 5;
}

Альтернативы, которые более распространены, были бы:

list.RemoveAll(delegate(int i) { return i < 5; });
// or...
list.RemoveAll(i => i < 5);

РЕДАКТИРОВАТЬ: чтобы ответить на другой вопрос в комментарии к другому сообщению, делегат - это тип, который определяет сигнатуру метода и может использоваться для передачи методов другим методам в качестве аргументов. Если вы немного знакомы с C ++, они похожи на указатели на функции. Для получения дополнительной информации о делегатах проверьте эту страницу MSDN .

3 голосов
/ 13 сентября 2009

Predicate - это тип (точнее, тип делегата) в пространстве имен System. Это не ключевое слово.

1 голос
/ 13 сентября 2009

Это определенно в 3.0 ... см. В нижней части этой страницы MSDN:

Информация о версии

.NET Framework

Поддерживается в: 3,5, 3,0, 2,0

Пока вы «используете Систему», вы должны ее видеть.

0 голосов
/ 13 сентября 2009

Предикат Тип существует в 3,5 и в 4,0.

0 голосов
/ 13 сентября 2009

Эта страница на MSDN посвящена делегату предиката (T), который, как говорится:

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

...