Вопрос

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

Это было полезно?

Решение

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

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);

EDIT: чтобы ответить на другой вопрос в комментарии к другому сообщению, делегат - это тип, который определяет сигнатуру метода и может использоваться для передачи методов другим методам в качестве аргументов. Если вы немного знакомы с C ++, они похожи на указатели на функции. Подробнее о делегатах читайте на этой странице MSDN .

Другие советы

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

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

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

.NET Framework

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

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

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

  

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

Предикат Тип есть в 3.5 и 4.0.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top