c# - 您在 C# 中制作或看到过哪些非常有值(value)的流畅接口(interface)?他们有什么了不起?

标签 c# c#-3.0 extension-methods fluent

“流畅的界面”是当今相当热门的话题。 C# 3.0 有一些不错的功能(特别是扩展方法)可以帮助您创建它们。

仅供引用,流畅的 API 意味着每个方法调用都会返回一些有用的东西,通常是您调用该方法所针对的同一个对象,因此您可以继续链接事物。 Martin Fowler 使用 Java 示例对其进行了讨论 here .这个概念有点像这样:

var myListOfPeople = new List<Person>();

var person = new Person();
person.SetFirstName("Douglas").SetLastName("Adams").SetAge(42).AddToList(myListOfPeople);

我在 C# 中看到了一些非常有用的流畅接口(interface)(一个例子是在 an earlier StackOverflow question I had asked 中找到的用于验证参数的流畅方法。它让我震惊。它能够为表达参数验证规则提供高度可读的语法,并且,如果没有异常,它能够避免实例化任何对象!所以对于“正常情况”,开销非常小。这个花絮在短时间内教会了我巨大的知识。我想找到更多类似的东西)。

因此,我想通过查看和讨论一些优秀示例来了解更多信息。那么,您用 C# 创建或看到过哪些优秀的流畅接口(interface),是什么让它们如此有值(value)?

谢谢。

最佳答案

这实际上是我第一次听到“流畅的界面”这个词。但我想到的两个例子是 LINQ 和不可变集合。

在幕后,LINQ 是一系列方法,其中大部分是扩展方法,它们至少采用一个 IEnumerable 并返回另一个 IEnumerable。这允许非常强大的方法链接

var query = someCollection.Where(x => !x.IsBad).Select(x => x.Property1);

不可变类型,更具体地说,集合具有非常相似的模式。不可变集合返回一个新集合,通常是一个变异操作。因此,构建一个集合通常会变成一系列链式方法调用。

var array = ImmutableCollection<int>.Empty.Add(42).Add(13).Add(12);

关于c# - 您在 C# 中制作或看到过哪些非常有值(value)的流畅接口(interface)?他们有什么了不起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/688418/

相关文章:

c# - 允许用户上传 Excel 文档的安全实现

c# - 为什么我的 C# Random 不创建任何随机数?

c# - 文件打开/保存对话框

c# - 从列表中获取相同元素的总和

c# - 奇怪的扩展方法重载决议

asp.net-mvc - 从 HtmlHelper 扩展方法中传递的 lambda 表达式获取属性值的最简单方法是什么?

c# - 用于身份验证的自定义 url

c# - 防止 Entity Framework 自动附加实体

asp.net - 有没有办法在 c# 中查询流,例如。从流对象中选择 *

c# - 将标志转换为 IEnumerable<Enum> 的扩展方法,反之 (C#)