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

.NET Compact Framework 泛型限制:不支援遞歸嵌套與超過 8 個類型參數

     編輯:關於.NET

.NET CF 2.0 雖引入泛型,但受限於映射驗證機制,存在兩大限制:不支援泛型遞歸嵌套、泛型方法類型參數最多 8 個。實測代碼驗證差異。

限制一:泛型遞歸嵌套

List<List<int>> 在完整框架編譯運行正常,CF 設備上運行拋出異常(編譯不報錯)。

原因:CF 缺少驗證工具,編譯期不驗證約束,運行時映射驗證失敗。

限制二:泛型方法類型參數 ≤ 8

完整框架支援任意數量:

void GetInfo2<T1...T9>(T1 t1, ..., T9 t9) // 9 個參數,正常運行

CF 設備上超過 8 個類型參數即失敗。

實測環境與代碼

  • VS2008 / Windows Mobile 5.0 / .NET CF 2.0
  • 完整框架控制台應用 vs 設備項目對比運行

設備項目中註釋掉的代碼即為失敗用例:

// 失敗:遞歸嵌套
// MyClass1<int> clsA = new MyClass1<int>();
// clsA.ClsB = new MyClass1<MyClass1<int>>();

// 失敗:9 個類型參數
// GetInfo2<int, string, float, decimal, UserClass1...UserClass5>(...);

官方文檔說明

  1. CF 缺少驗證工具,編譯期不驗證約束,綁定時才驗證映射。
  2. CF 提供有限映射功能,不支援過於複雜的泛型結構,但滿足基本需求。

開發建議

  • 避免多層泛型嵌套(List<List<T>>),改用自定義類封裝內層集合。
  • 泛型方法參數控制在 8 個以內,超過時拆分為多個方法或使用參數對象。
  • 設備端充分測試,編譯通過 ≠ 運行通過。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved