我创建了一个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
是否具有很好的描述性或实用性,因此我无法想到更好的名称。当我在越来越多的代码中使用它时,我想给它起一个恰当的描述性名称。
答案 0 :(得分:1)
比Do
更好的名称可能是Apply
。但是,此扩展方法将可用于所有类型的.NET Framework,因此它将使所有内容的智能列表变得混乱。排在列表的顶部会更加令人恼火,因此我倾向于使用从X,Y或Z开头的名称来命名它,然后将其移到底部。就我个人而言,我完全不希望有这样的扩展方法。