首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

探討 .NET 2.0 實作 Tuple 型別的兩種方案:TypeList 與多載結構體

     編輯:關於ASP.NET

Tuple (組元) 為固定長度、各元素型別固定的不可變結構,常用於多返回值、查詢結果。.NET 2.0 無原生 Tuple,作者提出兩種模擬方案。

方案一:泛型鏈表 TypeList

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");
  • 優點:語法直覺、零額外開銷、IntelliSense 完美支援
  • 缺點:最大長度固定 (需預先定義)、無法動態擴充

作者選擇

採用方案二,並為每個結構體加上全參數建構函式。實務上 10 元素足涵蓋 99% 場景,效能與開發體驗最佳平衡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved