请告诉我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#团队以来,我从未见过这种链接。 它真的吸引了我,我想了解更多相关信息。
请对此有所了解。
答案 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是一个更复杂的例子。最后,Autofac和CuttingEdge.Conditons是开源库的两个例子,它们具有非常好的流畅接口。
答案 1 :(得分:2)
大多数表达式没有什么特别之处,但select方法使用lambda expressions,Language 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 use和here's a tutorial for LINQ.
(如果你感兴趣:Reverse()返回一个从给定IEnumerable的后面到前面的IEnumerable,在应用给定的lambda表达式后,Select()返回一个列出所有元素的IEnumerable,而Sum()只是返回给定IEnumerable的所有元素的总和。)
答案 3 :(得分:1)
链接模式可以称为Fluent接口。它发生在接口的函数(或扩展方法)返回相同的接口时。在这种情况下,它是IEnumerable。
你还有一些使用Select和Sum函数抛出的LINQ