>>526でクリアしちゃダメなのは参照渡しだからであって
遅延実行だからじゃないよね。

例えば

var strList = new List<string>("a","a","b","c");
var work = strList.Distinct();
Array.ForEach( work.ToArray(), ( str ) => Console.WriteLine("hoge") );←この1行を追加
strList.Clear();
Array.ForEach( work.ToArray(), ( str ) => strList.Add( str ) );

とやって、clear前にLinqが実行されるようにしてももやっぱり結果はゼロ件