將字串中英文字母大小寫互換:大寫→小寫、小寫→大寫,非字母字元保持不變。
public static string ToggleCase(this string input)
{
if (string.IsNullOrEmpty(input)) return input;
var sb = new StringBuilder(input.Length);
foreach (char c in input)
{
if (char.IsLower(c)) sb.Append(char.ToUpper(c));
else if (char.IsUpper(c)) sb.Append(char.ToLower(c));
else sb.Append(c);
}
return sb.ToString();
}
public static string ToggleCaseLinq(this string input)
{
return string.IsNullOrEmpty(input) ? input :
new string(input.Select(c => char.IsLower(c) ? char.ToUpper(c) :
char.IsUpper(c) ? char.ToLower(c) : c).ToArray());
}
| 方法 | 分配次數 | 速度 | 可讀性 |
|---|---|---|---|
| StringBuilder 迴圈 | 1 次 (最終 ToString) | 最快 | 佳 |
| LINQ Select + ToArray | 2 次 (陣列 + 字串) | 稍慢 | 極佳 |
| string 串接 (+=) | N 次 (每次新字串) | 最慢 | 差 |
建議採用 StringBuilder 版本 作為通用擴充方法。
string s = "Hello World 123!"; string t = s.ToggleCase(); // "hELLO wORLD 123!"
char.IsLower/IsUpper/ToUpper/ToLower 皆依 Unicode 標準運作,支援希臘文、西里爾文、擴展拉丁字母等,無需額外處理。