2008年05月09日

String型のインテリセンス

  
昨日の記事「簡単な数学パズルを解く(2)」

"123456789".ToCharArray().All(c => s.Contains(c));

と書いたけれど、NyaRuRuさんのコード

"123456789".Except(..);

を見て、はたと気が付いた。
Stringは、IEnumerable<char>を実装しているんだってことを。

つまり、ToCharArray()は必要なく、
"123456789".All(c => s.Contains(c));

と書けるんですね。

インテリセンスでは、Except()、All()とかの拡張メソッドが出てこないので、使えないと思っていた。

で、MSDNドキュメントを見てみたら、Stringは、IEnumerable<string>を実装しているって書いてある????
IEnumerable<char>の間違いですね。

結局、なんで、インテリセンスで拡張メソッドが出てこないのかは不明。
混乱の元なので、あえて出していないのかな。


この記事へのコメント
こんにちは。調べてわかったこと書かせてもらいます。

>Stringは、IEnumerable<string>を実装しているって書いてある????

http://msdn.microsoft.com/ja-jp/library/system.string(VS.80).aspx
↑は古くて、↓の新しい方は直ってました。
http://msdn.microsoft.com/ja-jp/library/system.string.aspx

>なんで、インテリセンスで拡張メソッドが出てこないのかは不明

http://msdn.microsoft.com/ja-jp/library/bb383977.aspx
のメモに「String の場合、IntelliSense により標準クエリ演算子は表示されませんが、利用できます。」
って書いてあるの見つけました。
理由っぽいことがここに少しだけ書いてました。
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=289552
Posted by Streetw☆ at 2008年05月12日 14:17
Streetw☆ さん。
おおっ、ありがとうございます。
すでに直っているのですね。
今、msdnサイトの統合をやっているので、古いのと新しいのが混在してるんですね。
今度検索する時は、そのあたり注意しようっと。

なるほど、インテリセンスで拡張メソッドが出てこないのは、はやっぱり、By Designなんですね。
まあ、通常はString型に対してLINQの拡張メソッドがいっぱい出てきたら、迷惑かもです。

Posted by Gushwell at 2008年05月12日 19:29
 

この記事へのトラックバックURL