編集
参考までに、ericがコメントで言及したブログ投稿は次のとおりです。
https://ericlippert.com/2009/05/18/foreach-vs-foreach/
ORIG
私が思うにもっと好奇心がありますが、C#仕様のサバントのためのものです...
ForEach()句がIQueryable / IEnumerable結果セットで使用できない(または使用できない)のはなぜですか...
最初に結果をToList()またはToArray()に変換する必要があります。おそらく、C#がIEnumerablesとIEnumerablesを繰り返す方法には技術的な制限があります。リスト...それはIEnumerables/IQuerableコレクションの遅延実行と関係がありますか。例えば
var userAgentStrings = uasdc.UserAgentStrings
.Where<UserAgentString>(p => p.DeviceID == 0 &&
!p.UserAgentString1.Contains("msie"));
//WORKS
userAgentStrings.ToList().ForEach(uas => ProcessUserAgentString(uas));
//WORKS
Array.ForEach(userAgentStrings.ToArray(), uas => ProcessUserAgentString(uas));
//Doesn't WORK
userAgentStrings.ForEach(uas => ProcessUserAgentString(uas));