如何格式化lambda表达式和匿名方法以获得最大可读性?

时间:2009-06-09 19:30:49

标签: c# .net lambda

例如:

Sorter.SortBy ( array, ( a, b ) =>
{
    return a > b;
} );

格式化它们以获得最大可读性的最佳方法是什么?

还要考虑一个参数lambda版本,以及可能常用的其他情况。

指导原则是什么?

5 个答案:

答案 0 :(得分:2)

Sorter.Filter(array, a => a.IsOK);

Sorter.SortBy(array, (a, b) => a > b);

Collection.Apply(array, (a)       => a * a, // i like lining things up
                        (x, y, z) => WhipIt(x, y) / z,
                        (a, b)    => a + b);

Evaluator.Confuse(array, (a, func) =>  // this is a big one, engage curly braces
{
    if(a.Flag) return 0;
    else
    {
        var x = func(a);
        if(x < 0) return -1;
        else return x * 2;
    }
});

答案 1 :(得分:1)

为什么示例中的花括号?你不觉得这更具可读性吗? :

Sorter.SortBy ( array, (a,b) => (a > b) );

编辑 (回应评论):

如果您的lambda需要临时变量或其他无法在单个表达式中表达的内容,则应使用大括号和显式返回语句。在所有(大多数)其他情况下,省略它们更清晰,因为它看起来更直观(无论如何对我来说)。

答案 2 :(得分:1)

Sorter.SortBy(array, (a, b) => a > b);

答案 3 :(得分:1)

在处理复杂的lambda(在我看来,不仅仅是一行)时,我实际上更倾向于回归到老式的2.0匿名方法:

DoSomething的(
委托(int a,int b)
{
int c = a + b;
int d = / * blah blah * /
返回d;
});

当lambda包含多于一行时,我喜欢看到参数的类型而不仅仅是(a,b)。但那只是我。

答案 4 :(得分:0)

您将无法确定哪种格式化策略最佳,因为这通常非常主观。

你可以看看ReSharper是如何做到这一点的,因为它允许你稍微自定义格式。