[C#] 字串Split後使用Foreach是否需要另外使用變數儲存Array

  • 227
  • 0

字串Split後使用Foreach是否需要另外使用變數儲存Array

先前在C#討論群組看到某位網友提到

Split不可以寫在foreach裡面,因為每跑一次迴圈就會Split一次

看到這個論點就覺得有點納悶
foreach放的source就已經是實作IEnumerable的資料集合嗎,
既然已經是IEnumerable了為何還需要每次遍歷都要重新Split?
於是我模擬了這個狀況

string source = "1,2,3,4,5,6,7,8,9";
// 直接將Split寫在Foreach迴圈內
foreach (var element in source.Split(','))
{
	element.Dump();
}

// 另外宣告變數儲存Split後的陣列
var splited = source.Split(',');
foreach (var element in splited)
{
	element.Dump();
}

接下來我們把編譯後的IL反編譯為C#語法

可以發現兩種寫法的程式邏輯一模一樣,
反而是第二種寫法與第一種寫法相比多宣告了一個變數來指向相同陣列,
所以可以證明

將Split寫在foreach內並不會在每次遍歷時重新Split字串

 

foreach官方說明文件

https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/statements/iteration-statements#the-foreach-statement

 

Write By Charley Chang 


新手發文,若有錯誤還請指教,
歡迎留言或Mail✉給我

創用 CC 授權條款


本著作係採用創用 CC 姓名標示-非商業性-相同方式分享 4.0 國際 授權條款授權.