.NET 基礎類別庫的 String.Split 功能強大,但在某些特定場景(如需保留空白元素、自訂分隔邏輯)下顯得不夠靈活。本文示範如何撰寫一個字串分割的擴充方法 SplitExt,並對比一般靜態方法的寫法差異。
利用 this 關鍵字將方法掛載到 string 型別上,呼叫語法更直觀:
public static string[] SplitExt(this string sourceString, string splitString)
{
List<string> result = new List<string>();
string segment = string.Empty;
while (sourceString.IndexOf(splitString) > -1)
{
segment = sourceString.Substring(0, sourceString.IndexOf(splitString));
sourceString = sourceString.Substring(sourceString.IndexOf(splitString) + splitString.Length);
result.Add(segment);
}
result.Add(sourceString); // 加入最後一段
return result.ToArray();
}
呼叫範例: string[] parts = "A,B,C".SplitExt(",");
傳統寫法需傳入來源字串與分隔字串兩個參數:
public static string[] StringSplitExt(string sourceString, string splitString)
{
List<string> result = new List<string>();
string segment = string.Empty;
while (sourceString.IndexOf(splitString) > -1)
{
segment = sourceString.Substring(0, sourceString.IndexOf(splitString));
sourceString = sourceString.Substring(sourceString.IndexOf(splitString) + splitString.Length);
result.Add(segment);
}
result.Add(sourceString);
return result.ToArray();
}
呼叫範例: string[] parts = StringSplitExt("A,B,C", ",");
| 特性 | 擴充方法 | 靜態方法 |
|---|---|---|
| 呼叫語法 | str.SplitExt(",") | StringSplitExt(str, ",") |
| 可讀性 | 更符合物件導向直覺 | 傳統程式設計風格 |
| 發現性 | IntelliSense 自動提示 | 需知晓類別名稱 |
| 適用場景 | 字串處理核心邏輯、鏈式呼叫 | 工具類、跨專案共用邏輯 |
上述實作為示範邏輯,實際專案建議:
String.Split(已高度優化)。Regex.Split 或 String.Split 多載配合 StringSplitOptions。IndexOf,可改用 StringBuilder 或單次遍歷演算法。擴充方法讓字串操作更貼近自然語言,適合建立領域特定的工具集,提升團隊開發效率。