使用自定义 LINQ 扩展方法的内联变量

Inline variable using custom LINQ Extension Method

我创建了一个小的 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 这个名称是否具有很强的描述性或有用性,我想不出更好的名称。随着我在越来越多的代码中使用它,我想给它一个合适的、描述性的名称。

Do 更好的名字可能是 Apply。但是这个扩展方法对于所有类型的 .NET Framework 都是可调用的,所以它会使所有内容的智能感知列表变得混乱。排在列表的顶部会让人格外恼火,所以我倾向于用 X、Y 或 Z 开头的名称来命名它,以将其移至底部。就我个人而言,我根本不希望有这样的扩展方法。