通常情況下,我們可能會在篩選之前或之後使用 if 條件來檢查某些條件是否滿足,然後對符合條件的項目進行操作。
在這段代碼中,foreach 循環不僅僅是遍歷集合 r。它還起到了代替 if 條件的作用,因為篩選過程中只留下符合條件的項目進行處理。
var r = dt.Where(x =>
{
bool b = false;
var d1 = d2 = DateTime.Now;
switch (f)
{
case 1:
// 嘗試將日期格式化為平成年
b = DateTime.TryParse("X" + x.A, out d1) && DateTime.TryParse("X" + x.A, out d2);
break;
case 2:
// 嘗試將日期格式化為西曆日期
b = DateTime.TryParse(x.A, out d1) && DateTime.TryParse("2100.6.15", out d2);
break;
}
if (b)
// 檢查日期條件和特殊代碼
return (d1 >= d2 && x.B.Length > 0 && x.B != "A1");
else
return false;
}).ToArray();
// 遍歷符合條件的項目,並追加錯誤代碼
foreach (var i in r)
i.C += "456, ";
// 檢查是否取消操作
t.Token.ThrowIfCancellationRequested();
foreach 在這裡能夠代替 if 的關鍵原因是,當集合 r 為空時,foreach 根本不會執行任何操作。
注意:return 在 Where 中的作用是決定每個元素是否應該包含在結果集中。其作用範圍僅限於 Where 方法的 lambda 表達式內部。