陣列是儲存相同資料型別多個值的結構,透過索引(從 0 起算)存取元素。ASP.NET (VB.NET/C#) 中陣列為參考型別,繼承自 System.Array,提供豐富屬性與方法(Length、Rank、Sort、Reverse、LINQ 擴充方法等)。
// 固定長度,預設值初始化
int[] numbers = new int[5]; // {0,0,0,0,0}
string[] names = new string[3]; // {null,null,null}
// 宣告同時指定元素(型別推斷)
var days = new[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
int[] scores = { 85, 92, 78, 90, 88 }; // 只能在宣告時使用
// 多維陣列
int[,] matrix = new int[3, 4];
int[,] data = { {1,2}, {3,4}, {5,6} };
// 鋸齒陣列
int[][] jagged = new int[3][];
jagged[0] = new int[] {1,2};
jagged[1] = new int[] {3,4,5};
Dim numbers(4) As Integer ' 0~4 共 5 個
Dim names() As String = {"A", "B", "C"}
Dim matrix(2, 3) As Integer ' 3x4 多維
| 成員 | 說明 | 範例 |
|---|---|---|
| Length | 總元素數 | arr.Length |
| GetLength(d) | 第 d 維長度 | matrix.GetLength(0) → 3 |
| Rank | 維度數 | matrix.Rank → 2 |
| Sort() | 原地排序 | Array.Sort(arr) |
| Reverse() | 反轉 | Array.Reverse(arr) |
| IndexOf() | 尋找索引 | Array.IndexOf(arr, val) |
| Copy() | 複製陣列 | Array.Copy(src, dest, len) |
| Resize() | 調整大小 | Array.Resize(ref arr, newSize) |
原文 VB.NET 範例重寫為現代 C# ASP.NET Web Forms / MVC / Razor Pages 通用邏輯:
// 共用邏輯類別
public static class DateHelper
{
private static readonly string[] WeekDays =
{ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
public static string GetChineseDateTimeString(DateTime? dt = null)
{
dt ??= DateTime.Now;
// DayOfWeek: Sunday=0 ~ Saturday=6,剛好對應陣列索引
return $"{dt:yyyy年MM月dd日} {WeekDays[(int)dt.Value.DayOfWeek]}";
}
}
// .aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
lblDateTime.Text = DateHelper.GetChineseDateTimeString();
}
<!-- .aspx -->
<asp:Label ID="lblDateTime" runat="server" />
// Controller / PageModel
public string CurrentDateTime => DateHelper.GetChineseDateTimeString();
<!-- .cshtml -->
<span>@Model.CurrentDateTime</span>
| 特性 | 陣列 T[] | List<T> |
|---|---|---|
| 大小固定 | 是 | 動態調整 |
| 記憶體效能 | 略佳(連續記憶體) | 略高(內部陣列+擴充邏輯) |
| 功能豐富度 | 基本 | Add/Remove/Find/排序/轉換豐富 |
| 介面傳回 | 建議回傳 IReadOnlyList<T> 或 IEnumerable<T> | 內部使用 List,對外暴露介面 |
原則:**內部操作用 List,對外 API/序列化用陣列或唯讀介面**。
Array.Resize 會建立新陣列,原參考不變,需用 ref。[ , ] 記憶體連續,鋸齒陣列 [] [] 為陣列的陣列,效能與語意不同。.ToArray() 或 .Clone()。掌握陣列基礎,配合 LINQ (Where, Select, GroupBy) 即能處理 90% 集合運算需求。