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

时间:2019-06-16 01:00:31

标签: c# linq naming-conventions

我创建了一个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)语句会影响性能,而为其创建局部变量只会不必要地使范围混乱,因为它仅在该位置使用过。 此外,这允许在通常必须使用block语句(只有两行长)的地方使用表达式主体。

但是,我不确定名称Do是否具有很好的描述性或实用性,因此我无法想到更好的名称。当我在越来越多的代码中使用它时,我想给它起一个恰当的描述性名称。

1 个答案:

答案 0 :(得分:1)

Do更好的名称可能是Apply。但是,此扩展方法将可用于所有类型的.NET Framework,因此它将使所有内容的智能列表变得混乱。排在列表的顶部会更加令人恼火,因此我倾向于使用从X,Y或Z开头的名称来命名它,然后将其移到底部。就我个人而言,我完全不希望有这样的扩展方法。