for 迴圈是 C# 中遍歷與賦值陣列最基礎、最常用的控制結構。本文透過完整範例示範陣列宣告、初始化、賦值的標準寫法,並延伸至資料來源綁定的實務場景。
for (int i = 0; i < array.Length; i++)
{
array[i] = /* 計算或取得的值 */;
}
using System;
public class ArrayAssignmentDemo
{
public static void Main()
{
int n = 10; // 陣列長度
string[] strArray = new string[n];
// 方式一:單純計算賦值
for (int i = 0; i < n; i++)
{
strArray[i] = $"Item_{i:D3}"; // 格式化字串
}
// 方式二:從資料來源賦值(模擬 DataTable)
// 假設有 DataTable dt,包含 "Name" 欄位
// for (int i = 0; i < n && i < dt.Rows.Count; i++)
// {
// strArray[i] = dt.Rows[i]["Name"].ToString();
// }
// 輸出驗證
Console.WriteLine("陣列內容:");
for (int i = 0; i < strArray.Length; i++)
{
Console.WriteLine($"[{i}] = {strArray[i]}");
}
}
}
public string[] DataTableColumnToArray(DataTable table, string columnName)
{
if (table == null || !table.Columns.Contains(columnName))
return Array.Empty();
string[] result = new string[table.Rows.Count];
for (int i = 0; i < table.Rows.Count; i++)
{
// 安全處理 DBNull
var value = table.Rows[i][columnName];
result[i] = value == DBNull.Value ? string.Empty : value.ToString();
}
return result;
}
| 方式 | 語法範例 | 優點 | 適用場景 |
|---|---|---|---|
| for 迴圈 | for (int i=0; i<len; i++) |
索引可控、效能最佳、可反向/跳躍 | 需索引運算、高效能、複雜邏輯 |
| foreach | foreach (var item in arr) |
語法簡潔、不可變更陣列內容 | 唯讀遍歷、LINQ 查詢前置 |
| LINQ Select | arr.Select((v,i) => ...).ToArray() |
函數式、可鏈式操作、平行化易 | 資料轉換、篩選、投影 |
| Array.ConvertAll | Array.ConvertAll(arr, v => ...) |
專為陣列轉換設計、無索引需求 | 單純元素轉換 |
| Span/Memory | span[i] = ... |
零複製、高效能、跨陣列/堆疊/非託管 | .NET Core 2.1+ 高效能場景 |
array.Length 存入區域變數(JIT 通常會優化,但習慣上較好)Span 或 ArrayPoolParallel.For(注意執行緒安全)for 迴圈雖然基礎,但掌握其變體與替代方案,能在不同場景下寫出既清晰又高效的陣列操作程式碼。