Я создал небольшой метод расширения LINQ, который позволяет мне использовать значение для очень небольшого кода без необходимости объявлять локальную переменную.
public static TReturn Do<TInput, TReturn>(this TInput input, Func<TInput, TReturn> func)
=> func(input);
Я использую его для встраивания чуть более дорогих выражений, которые я использую только в одном месте, например:
var ImportantValue = MyDatabase.First(e => e.Id == 28131).Do(e =>
{
Console.WriteLine(e.Name);
MyOtherDatabase.Add(new Foo(e.FooParameter));
return e.ImportantValue;
});
Это полезно, поскольку дублирование оператора MyDatabase.First(e => e.Id == 28131)
может привести к падению производительности, а создание локального для него просто бесполезно загромождает область, так как она используется только в этом месте.
Кроме того, это позволяет использовать тела выражений в тех местах, где обычно приходится использовать оператор блока, только если длина его составляет две строки.
Однако я не уверен, что имя Do
очень наглядно или полезно, и я не могу придумать более подходящих названий для этого. Поскольку я использую это все больше и больше кода, я хотел бы дать ему правильное, описательное имя.