Встроенная переменная с использованием пользовательского метода расширения LINQ - PullRequest
1 голос
/ 16 июня 2019

Я создал небольшой метод расширения 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 очень наглядно или полезно, и я не могу придумать более подходящих названий для этого. Поскольку я использую это все больше и больше кода, я хотел бы дать ему правильное, описательное имя.

1 Ответ

1 голос
/ 16 июня 2019

Лучшее имя, чем Do, возможно Apply.Но этот метод расширения будет вызываться для всех типов .NET Framework, поэтому он будет загромождать список всех значений.Нахождение в верхней части списка было бы очень раздражающим, поэтому я бы склонялся назвать его чем-то, начинающимся с X, Y или Z, чтобы переместить его вниз.Лично я предпочел бы вообще не использовать такой метод расширения.

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