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?
Odpowiedz
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.
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. –
Cóż, punktem PCL jest to, że możesz * wybrać * WinRT pewnego dnia. –
Wygląda na to, że mamy tu nieco inne wizje, ale na razie przyjmuję twoją odpowiedź, ponieważ nie widzę innego sensu. Dzięki! –
Czy jesteś pewien, że nie implementuje 'IEnumerable' lub czy Intellisense to ukrywa? –
CodesInChaos
Tak, jestem pewien, dostaję błąd, gdy próbuję go zbudować. –
Hmm właśnie sprawdziłem dokumenty, a 'GetEnumerator' faktycznie nie jest częścią PCL. Co to było MS myśli ... – CodesInChaos