Neutral Scent

App developments & Gadgets

MatchCollectionをメソッド構文でLinqしようとしてエラーになるときはCast()しよう

RegexのMatchs()メソッドの戻り値MatchCollectionをLinqで整形しようとしたら、なぜかクエリ構文ではうまく行くのにメソッド構文ではエラーになるという状況に追い込まれました。

わかってしまえば単純な話で、上のクエリ構文ではエラーが出た時にしっかりキャストしていたのでした。
なのでメソッド構文でも明示的にキャストしてやれば解決です。



Regex rx = new Regex("<span class=\"tag\"[^>]*?>(?<tag>[^<]+?)</span>");
MatchCollection mcol = rx.Matches(e.Result);
var y = mcol.Cast<Match>().Select(t => t.Groups["tag"].Value);
まだまだ修行が足りませんね。

参考: neue cc - IEnumerableのCastを抹殺するためのT4 Templateの使い方
http://neue.cc/2010/07/07_266.html