C#中的这种链接叫什么?

时间:2010-04-14 04:30:56

标签: c#

请告诉我C#中的构造是什么样的。

Code Golf: Numeric equivalent of an Excel column name

C.WriteLine(C.ReadLine() 
            .Reverse() 
            .Select((c, i) => (c - 64) * System.Math.Pow(26, i)) 
            .Sum());

虽然我是C#的新手(到目前为止只有两个月),但自从我加入C#团队以来,我从未见过这种链接。 它真的吸引了我,我想了解更多相关信息。

请对此有所了解。

4 个答案:

答案 0 :(得分:9)

像这样链接的方法通常称为fluent interface

您可以通过实现返回调用对象的函数来创建自己的流畅界面。

一个简单的例子:

class Foo 
{
    private int bar;

    public Foo AddBar(int b) 
    {
        bar += b;
        return this;
    }
}

可以使用:

Foo f = new Foo().AddBar(1).AddBar(2);

您还可以使用扩展方法实现流畅的界面。

例如:

class Foo 
{
    public int Bar { get; set; }
}

static class FooExtensions 
{
    public static Foo AddBar(this Foo foo, int b)
    {
        foo.Bar += b;
        return foo;
    }
}

Here是一个更复杂的例子。最后,AutofacCuttingEdge.Conditons是开源库的两个例子,它们具有非常好的流畅接口。

答案 1 :(得分:2)

大多数表达式没有什么特别之处,但select方法使用lambda expressionsLanguage Integrated Query的关键组件 - 简称LINQ。

  

.NET语言集成查询定义   一套通用标准   查询允许遍历的运算符,   过滤和投影操作   直接表达   任何基于.NET的声明方式   编程语言。

LINQ和它们使用的lambda表达式是一种简洁可读地编写复杂查询和操作表达式的方法。它已在3.5中添加到.NET Framework中。这是一些more information from MSDN

答案 2 :(得分:2)

它只是带有一些缩进的函数调用链,其中C调用ReadLine(),其结果用于Reverse,其结果用于Select等。函数本身是LINQ的一部分,那些是在翻译语法糖后使用。 Here's a list of LINQ query functions, along with samples on their usehere's a tutorial for LINQ.

(如果你感兴趣:Reverse()返回一个从给定IEnumerable的后面到前面的IEnumerable,在应用给定的lambda表达式后,Select()返回一个列出所有元素的IEnumerable,而Sum()只是返回给定IEnumerable的所有元素的总和。)

答案 3 :(得分:1)

链接模式可以称为Fluent接口。它发生在接口的函数(或扩展方法)返回相同的接口时。在这种情况下,它是IEnumerable。

你还有一些使用Select和Sum函数抛出的LINQ