首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VB.NET 轉 C#:Array 函數與 UBound 函數的對應替換方案

     編輯:程式設計綜合問答

VB.NET 遷移到 C# 時,`Array` 函數與 `UBound` 函數是常見的轉換難點。C# 無直接等價函數,需採用數組初始化器或 LINQ 實現同等功能。

VB.NET 原代碼場景

' VB.NET
Dim arr = Array("A", "B", "C")  ' 創建數組
Dim upper = UBound(arr)         ' 獲取最大索引 (返回 2)
' 等價於 arr.GetUpperBound(0)

C# 替換方案對比

1. Array 函數替換:創建數組

| VB.NET 寫法 | C# 替換方案 | 適用場景 | |-------------|-------------|----------| | `Array("A", "B", "C")` | `new[] { "A", "B", "C" }` | **最推薦**:編譯期類型推斷、語法簡潔 | | `Array("A", "B", "C")` | `new string[] { "A", "B", "C" }` | 顯式指定類型 | | `Split("A,B,C", ",")` | `"A,B,C".Split(',')` | 字符串分割生成數組 | | `Array.CreateInstance(...)` | `Array.CreateInstance(typeof(string), 3)` | 動態類型/維度創建 (罕用) |

2. UBound 函數替換:獲取最大索引

| VB.NET 寫法 | C# 替換方案 | 說明 | |-------------|-------------|------| | `UBound(arr)` | `arr.Length - 1` | **一維數組標準寫法** | | `UBound(arr, 1)` | `arr.GetUpperBound(0)` | 多維數組第 1 維 (C# 0-based) | | `UBound(arr, 2)` | `arr.GetUpperBound(1)` | 多維數組第 2 維 | | `arr.GetLength(0) - 1` | 等價於 `GetUpperBound(0)` | 另一種寫法 |

完整轉換示例

場景一:聲明並初始化

' VB
Dim names = Array("張三", "李四", "王五")
For i = 0 To UBound(names)
    Debug.Print(names(i))
Next

// C#
var names = new[] { "張三", "李四", "王五" };
for (int i = 0; i < names.Length; i++)  // 或 i <= names.Length - 1
{
    Console.WriteLine(names[i]);
}

// 更現代:foreach
foreach (var name in names) Console.WriteLine(name);

場景二:動態添加元素 (VB Array 不定長特性)

' VB: Array 配合 ReDim Preserve 動態擴容
Dim dynArr() As String
ReDim Preserve dynArr(0)
dynArr(0) = "First"
ReDim Preserve dynArr(1)
dynArr(1) = "Second"

// C#: 使用 List 替代
var list = new List { "First" };
list.Add("Second");
var arr = list.ToArray(); // 需要數組時轉換

場景三:多維數組邊界

' VB: 多維數組
Dim matrix(2, 3) As Integer  ' 0-2, 0-3
Dim u1 = UBound(matrix, 1)   ' 返回 2
Dim u2 = UBound(matrix, 2)   ' 返回 3

// C#: 多維數組
var matrix = new int[3, 4];  // [0-2, 0-3]
var u1 = matrix.GetUpperBound(0); // 2
var u2 = matrix.GetUpperBound(1); // 3
var len1 = matrix.GetLength(0);   // 3
var len2 = matrix.GetLength(1);   // 4

遷移核心對照表

| VB.NET 概念 | C# 對應 | 關鍵差異 | |-------------|---------|----------| | `Array(...)` | `new[] { ... }` | C# 無可變參數 Array 函數 | | `UBound(arr)` | `arr.Length - 1` | C# 0-based 索引,Length 為長度 | | `ReDim Preserve` | `List.Add()` | C# 數組長度固定,用 List 動態擴容 | | `LBound(arr)` | `0` (固定) | C# 數組索引固定從 0 開始 | | `Split(str, ",")` | `str.Split(',')` | 實例方法 vs 共享方法 |

工具輔助遷移

  • Telerik Code Converter:在線 VB↔C# 轉換
  • SharpDevelop / ILSpy:反編譯 IL 對照
  • Visual Studio:貼上 VB 代碼到 .cs 文件,IDE 會提示部分轉換

核心原則:VB 的 Array 改用 C# 數組初始化器;UBound 改用 Length - 1;動態數組改用 List<T>。掌握這三點,覆蓋 95% 遷移場景。

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