なーるなんだけど

以下のようなソースがある。

  bool flg = true;

  List<string> list = new List<string>() { "abc", "bcd" };
  //これはOK
  string result = list.Find(flg ? new Predicate<string>(delegate(string str) { return str.Contains("a"); })
                                : new Predicate<string>(delegate(string str) { return str.Contains("b"); }));
  //これはコンパイルエラーになる
  string result2 = list.Find(new Predicate<string>(flg ? delegate(string str) { return str.Contains("a"); }
                                                       : delegate(string str) { return str.Contains("b"); }));

「'匿名メソッド' と '匿名メソッド'' の間に暗黙的な変換がないため、条件式の型がわかりません。」って怒られてしまって、

なんでだろーって思ってた(2か月くらい前…)。

で、ググってみるとわんくまのR・田中一郎さんのブログで同じことが扱われたのを発見した。

http://blogs.wankuma.com/rti/archive/2008/05/23/139053.aspx

理由は理解できるんだけど、エラーになるほうで記述できたほうがいいなぁと思った。