C# Fluent API 流式接口 介紹和示範

在 C# 的 LINQ 中應該很常看到類似下面的程式碼:
    
var dict = new Dictionary<string, string>()
{
    { "k1", "v1" },
    { "k2", "v2" },
    { "k3", "v3" },
};

var query = dict
    .Where(x=>x.Key != "k1")
    .Select(x=>x.Value)
    .OrderBy(x=>x)
    .ToList();
// query: v2, v3
    

其中在呼叫 Where, Select, OrderBy, ToList 方法的是在同一行完成,並沒有分號(;)中斷。這是因為在每個方法中都回傳自己(this),就可以再次呼叫自己可以使用的方法。這種作法又稱為鍊式呼叫。

實作:
    
MyClass myClass = new();
myClass
    .SetId(1)
    .SetName("test");
    
public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }

    // Fluent API 
    public MyClass SetId(int id)
    {
        Id = id;
        return this;
    }

    public MyClass SetName(string name)
    {
        Name = name;
        return this;
    }
}
    

留言