Тривиальные лямбды в LINQ - PullRequest
3 голосов
/ 13 марта 2012

Редактировать: Несмотря на возражения, я не думаю, что это больше хороший вопрос (см. Различные комментарии). Извините за потраченное впустую место, но, к сожалению, мне не хватает представителя, чтобы удалить свой пост.

Есть ли лучший способ создания лямбды (или, возможно, предиката или выражения, не являющегося лямбда-выражением), который возвращает либо 1) единственный аргумент без изменений, либо 2) постоянное значение? Я иногда сталкиваюсь с этим при использовании LINQ, когда базовый метод расширения LINQ требует Func<x,y>, но мне нужен только входной аргумент или константа.

В двухлетнем вопросе Джон Скит утверждал, что для функции идентификации сокращения нет (см. Функция идентификации LINQ? ). Это же верно для константного выражения? Что-нибудь изменилось (или изменилось) в .NET 4.5 или C # 5?

Ответы [ 2 ]

7 голосов
/ 13 марта 2012

вам не нужно указывать предикат для метода Count

.Count()
2 голосов
/ 13 марта 2012

Если бы вы искали своего рода лямбда-константу, самым подходящим вариантом был бы обычный метод. Допустим, Func<string,bool> требуется, и вы хотите, чтобы он возвращал его true в любом случае. Вместо написания collection.SomeLinqMethod(s => true) вы можете создать статический класс с соответствующими методами

public static class Expressions
{
    public static bool True(string s)
    {
        return true;
    }
}

Тогда вы бы написали

var result = collection.SomeLinqMethod(Expressions.True);

Вы также можете использовать универсальные методы

public static bool True<T>(T item)
{
    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...