C# にて副作用は必要だが戻り値が void で困った場合にどうするか?

追記2

落とし穴は Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta で塞がれました.

追記

この話は落とし穴があるので注意.詳しくは最後の追記を.



Unit 型が無くて困るぜな話.

letで代入を伴うのでvoidなメソッドを呼べないといってintに変えてまでどっぷり暗黒面という事で、「その気になればif、for、foreach、whileといった制御構文みんな要らないよね」ではありますが適度に使ってくれたほうが絶対良いですね。

re: LINQでリバーシ(4) そして暗黒面へ 2008/02/07 9:40 菊池 - 菊池 Blog

これについては,

"voidを返すメソッド() is object"でboolを表現できる

素数を求める1行プログラム(C#3.0編) - このブログは証明できない。

ってのを最近見て「へーへーへー」だったのでありますよ.

var q = Enumerable.Range(0, 100)
                  .Select(i => !(Console.WriteLine(i) is object) ? i : i)
                  .ToArray();

という感じで副作用挟み込み.警告鬱陶しいですが.

追記

そういや警告 CS0184 は嫌な予感がするなあと思ったら予想通り嫌なことになっていた.
CS0184 should be a compile error