【发布时间】:2019-06-16 01:00:31
【问题描述】:
我创建了一个小的 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 这个名称是否具有很强的描述性或实用性,我想不出更好的名称。随着我在越来越多的代码中使用它,我想给它一个合适的描述性名称。
【问题讨论】:
-
是什么阻止了你给它起一个更好的名字,你知道上下文,你如何期待 SO 的帮助。还有
Func返回值在哪里,这个怎么编译你需要TReturn
标签: c# linq naming-conventions