2012-07-19 21 views
11

.NET Framework 4とSilverlight 5を対象とするPCLプロジェクトを作成しました(Visual Studio 2010の拡張機能を使用しますが、Visual Studio 2012の移植可能なプロジェクトテンプレートではありません)。 System.Linq.Enumerable.Reverse<TSource>()拡張メソッドを使用して文字列を反転しようとしていますが、System.StringにはIEnumerable<char>が実装されていないとコンパイラは考えるので、機能しません。Stringクラスで携帯型ライブラリのIEnumerable <char>が実装されないのはなぜですか?

+0

「IEnumerable 」が実装されていないのですか、それともIntelliSenseが隠すだけですか? – CodesInChaos

+0

確かに、ビルドしようとするとエラーが発生します。 –

+0

ちょうどドキュメントをチェックし、 'GetEnumerator'は確かにPCLの一部ではありません。 MSの考えは何ですか... – CodesInChaos

答えて

13

ポータブルクラスライブラリは、サポートすることを約束したすべてのターゲットプラットフォームで使用できるクラスとメソッドに制限する必要があります。ここで最大のトラブルメーカーはWinRTですが、CLRにはWinRTの種類を管理された種類にマップする言語計画があります。投影によってサポートされていないSystem.Stringメソッドは、this answerに記載されています。 GetEnumerator()はその1つです。

+0

私は、WinRT(実際には、フレームワーク選択ウィンドウでMetroスタイルのアプリケーションの.NETと呼ばれています)をターゲットフレームワークとして選択しなかったので意味があります。私はPCLが選択されたプラットフォーム/フレームワークの交差点として機能するはずだと思います。 –

+3

PCLのポイントは、いつかWinRTを選択するかもしれないということです。 –

+0

私たちは若干異なるビジョンを持っているようですが、私はあなたの答えを受け入れようとしています。なぜなら、意味が分からないからです。ありがとう! –