2010-05-21 36 views
1

Having Collection initializers in C#並被允許爲define properties of a class without having to call the constructor,在C#中使用方法鏈接有什麼意義嗎? 我看不到任何東西。也許我在這裏錯過了一些東西?是否值得在C#中使用方法鏈接?

感謝

+1

您是否在具體詢問在構建複雜對象*時使用方法鏈是否有任何意義,而不是其他方法鏈的使用? – 2010-05-21 16:20:49

+0

我主要在構建屬性對象,因爲這是我通常看到的例子。但似乎我已經忘記了像LINQ這樣的例子,你真的在​​鏈接一系列的動作。 – 2010-05-21 16:29:10

回答

8

LINQ?

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

的常見用法是fluent interfaces

編輯:針對在評論的問題,物業/收集initialisers是相當有限的,你只能設置化子性質或致電一個Add方法集合,而方法調用更靈活,因爲它們可以採用多重參數。

流暢的接口只是方法鏈接的一個特定用途,用於生成更易讀的API,通常用於對象構建器。

此外,作爲MSDN文章是相當誤導性的,因爲對象初始器不允許您繞過構造函數,只是在該示例中,StudentName類具有默認的構造函數,它什麼都不做。

+0

我不問他們有什麼共同的用途,如果在C#中使用「舊」方法鏈接有任何意義,因爲你有集合和屬性初始值設定項。 – 2010-05-21 16:15:56

+0

@devoured極樂世界:也許你需要告訴我們你認爲「老」的方法鏈接。 – LukeH 2010-05-21 16:18:44

+0

http://en.wikipedia.org/wiki/Method_chaining – 2010-05-21 16:19:20

4

CuttingEdge.Conditions是方法鏈接爲什麼方便的一個很好的例子?

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

好的例子,確實如此。 – 2010-05-21 17:13:19

相關問題