Tuple (組元) 為固定長度、各元素型別固定的不可變結構,常用於多返回值、查詢結果。.NET 2.0 無原生 Tuple,作者提出兩種模擬方案。
public abstract class TypeNode { internal TypeNode() {} }
public sealed class Tail : TypeNode {}
public sealed class Tuple<T, TNode> : TypeNode where TNode : TypeNode, new()
{
public T Field = default(T);
public TNode Next = new TNode();
}
// 使用:Tuple<string, Tuple<int, Tuple<double, Tail>>>
var t = new Tuple<string, Tuple<int, Tuple<double, Tail>>>();
t.Field = "abc";
t.Next.Field = 123;
t.Next.Next.Field = 45.6;
t.Next.Next.Field)、建構大量泛型實例效能差 (反射)public struct Tuple<T0> { public T0 Field0; }
public struct Tuple<T0, T1> { public T0 Field0; public T1 Field1; }
public struct Tuple<T0, T1, T2> { public T0 Field0; public T1 Field1; public T2 Field2; }
// ... 最多定義到 10-16 個型別參數
// 使用:語法自然
var t1 = new Tuple<string, int, double>("abc", 123, 45.6);
var t2 = new Tuple<string, string>("a", "b");
採用方案二,並為每個結構體加上全參數建構函式。實務上 10 元素足涵蓋 99% 場景,效能與開發體驗最佳平衡。