2012-07-19 4 views
11

Stworzyłem projekt PCL, który jest ukierunkowany na .NET Framework 4 i Silverlight 5 (używam rozszerzenia do Visual Studio 2010, nie przenośnego szablonu projektu z Visual Studio 2012, jeśli to ma znaczenie). Próbuję odwrócić ciąg za pomocą metody rozszerzającej System.Linq.Enumerable.Reverse<TSource>(), ale to nie działa, ponieważ kompilator uważa, że ​​System.String nie implementuje IEnumerable<char>.Dlaczego klasa String nie implementuje IEnumerable <char> w bibliotece przenośnej?

+0

Czy jesteś pewien, że nie implementuje 'IEnumerable ' lub czy Intellisense to ukrywa? – CodesInChaos

+0

Tak, jestem pewien, dostaję błąd, gdy próbuję go zbudować. –

+0

Hmm właśnie sprawdziłem dokumenty, a 'GetEnumerator' faktycznie nie jest częścią PCL. Co to było MS myśli ... – CodesInChaos

Odpowiedz

13

Przenośne biblioteki klas muszą ograniczać się do klas i metod dostępnych na wszystkich platformach docelowych, które obiecuje wspierać. Największym problemem jest tutaj WinRT, CLR ma projekcję językową, która mapuje typy WinRT na typy zarządzane. Metody System.String nie obsługiwane przez projekcję są udokumentowane w this answer. GetEnumerator() jest jednym z nich.

+0

To ma sens, ponieważ nie wybrałem WinRT (tak naprawdę nazywa się .NET dla aplikacji w stylu Metro w oknie wyboru ramki) jako ramą docelową. Domyślam się, że PCL powinien działać jako punkt przecięcia wybranych platform/frameworków. –

+3

Cóż, punktem PCL jest to, że możesz * wybrać * WinRT pewnego dnia. –

+0

Wygląda na to, że mamy tu nieco inne wizje, ale na razie przyjmuję twoją odpowiedź, ponieważ nie widzę innego sensu. Dzięki! –