【问题标题】:Inline variable using custom LINQ Extension Method使用自定义 LINQ 扩展方法的内联变量
【发布时间】: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 =&gt; e.Id == 28131) 语句会影响性能,并且为它创建一个本地只会不必要地混淆范围,因为它只在那个地方使用过。 此外,这允许在您通常必须使用块语句的地方使用表达式主体,只是让它有两行长。

但是,我不确定Do 这个名称是否具有很强的描述性或实用性,我想不出更好的名称。随着我在越来越多的代码中使用它,我想给它一个合适的描述性名称。

【问题讨论】:

  • 是什么阻止了你给它起一个更好的名字,你知道上下文,你如何期待 SO 的帮助。还有Func返回值在哪里,这个怎么编译你需要TReturn

标签: c# linq naming-conventions


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多