【问题标题】:Is it worth to use method chaining in C#?在 C# 中使用方法链接是否值得?
【发布时间】:2010-05-21 16:12:56
【问题描述】:

Having Collection initializers in C# 并被允许define properties of a class without having to call the constructor,在 C# 中使用方法链接有什么意义吗? 我什么都看不到。也许我在这里遗漏了什么?

谢谢

【问题讨论】:

  • 您是不是特别想问在构建复杂对象中使用方法链接是否有任何意义,而不是方法链接的其他用途?
  • 我主要考虑构建属性对象,因为这是我经常看到的例子。但似乎我忘记了像 LINQ 这样的例子,你实际上是在链接一组动作。

标签: c# method-chaining


【解决方案1】:

LINQ?

var item = sequence.Where(x => x.Age > 100)
                   .Select(x => new { x.FirstName, x.LastName })
                   .OrderBy(x => x.LastName)
                   .FirstOrDefault();

【讨论】:

    【解决方案2】:

    一个常见的用法是fluent interfaces

    编辑:针对 cme​​ts 中的问题,属性/集合初始化器相当有限,因为您只能设置属性或调用集合上的 Add 方法,而方法调用更灵活,因为它们可以接受多个参数。

    流畅的接口只是方法链的一种特定用途,用于生成更具可读性的 API,通常用于对象构建器。

    另外,顺便说一句,MSDN 文章非常具有误导性,因为对象初始化器不允许您绕过构造函数,只是在示例中,StudentName 类有一个默认构造函数,它什么都不做。

    【讨论】:

    • 我不是在问它们的常见用途是什么,我想问的是在 C# 中使用“旧”方法链接是否有任何意义,因为您同时拥有集合和属性初始化器。
    • @devoured elysium:也许您需要告诉我们您认为“旧”方法链接是什么。
    • 顺便说一句,方法链和流式接口之间到底有什么区别?
    • @Lee:+1 指出了误导性的 MSDN 文章。我正要这样做。
    • 是的,我知道构造函数有误导性,但我懒得更客观:(
    【解决方案3】:

    CuttingEdge.Conditions 是一个很好的例子,说明为什么方法链接很方便?

    public void GetData(int? id)
    {
        // Check all preconditions:
        Condition.Requires(id)
            .IsNotNull()
            .IsInRange(1, 999)
            .IsNotEqualTo(128);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多