13

String は を実装しているのでIEnumerable<char>、たとえばピリオドを入力するときに、Intellisense で Enumerable 拡張メソッドが表示されることを期待していました。

String s = "asdf";
s.

.Select<char>(...)、などが表示されることを期待してい.ToList<char>()ました。その後、拡張メソッド実際に文字列クラスで機能することに驚きました。Intellisense には表示されません。これがなぜなのか誰か知っていますか?これは、この質問に関連している可能性があります。

4

3 に答える 3

15

それは明示的な設計によるものです。問題は、String が確実に を実装しているIEnumerable<T>のに、ほとんどの人がそのように考えたり、もっと重要なことに、そのように使用したりしないことです。

String にはかなり少数のメソッドがあります。最初は、拡張メソッドを String から除外しなかったため、多くの否定的なフィードバックがありました。適切なインポートにより、メソッドの数がほぼ 3 倍になったこともあります。すべての拡張メソッドが表示されているため、探している String メソッドが雑音の中で見えないことがよくありました。

文字列は ... 単純な型であり、そのように表示することをお勧めします:)

文字列に対して拡張メソッドを呼び出すことはまだ完全に可能です。インテリセンスに表示されない可能性が高いです。

編集: String には実際にはかなりの数のメソッドがあります。しかし、それらの多くはオーバーロードであるため、インテリセンスでは崩壊します。

于 2008-12-06T04:10:57.843 に答える
2

参考までに、これはVS2010で変更されました(少なくともベータ2では)。このフィルタリングが削除されたようで(おそらく混乱が多すぎたため)、拡張メソッドのグリフとともにメソッドが表示されるようになりました。

于 2009-11-01T09:30:47.713 に答える
-2

そうすべき。

For example you can write it public static string myExtensionMethod(this String yuppi){
}

それならそこにあるはずです。

于 2008-12-10T05:07:01.940 に答える