2012-07-19 15 views
11

He creado un proyecto PCL que apunta a .NET Framework 4 y Silverlight 5 (utilizo una extensión para Visual Studio 2010, no una plantilla de proyecto portátil de Visual Studio 2012, si eso importa). Estoy intentando invertir una cadena utilizando el método de extensión System.Linq.Enumerable.Reverse<TSource>(), pero no funciona porque el compilador cree que System.String no implementa IEnumerable<char>.¿Por qué la clase String no implementa IEnumerable <char> en una biblioteca portátil?

+0

¿Estás seguro de que no implementa 'IEnumerable ', o Intellisense simplemente lo oculta? – CodesInChaos

+0

Sí, estoy seguro, recibo un error cuando intento compilarlo. –

+0

Hmm acaba de comprobar los documentos, y 'GetEnumerator' no forma parte de PCL. ¿Qué estaba pensando MS? – CodesInChaos

Respuesta

13

Las bibliotecas de clases portátiles deben restringirse a las clases y métodos que están disponibles en todas las plataformas de destino que promete admitir. El mayor alborotador aquí es WinRT, el CLR tiene una proyección de lenguaje que asigna tipos WinRT a tipos administrados. Los métodos System.String no admitidos por la proyección están documentados en this answer. GetEnumerator() es uno de ellos.

+0

Eso tiene sentido, por no seleccionar WinRT (en realidad, se llama .NET para aplicaciones de estilo Metro en la ventana de selección de marcos) como un marco de destino. Creo que PCL debería funcionar como una intersección de plataformas/marcos seleccionados. –

+3

Bueno, el objetivo de PCL es que * quizás * seleccione WinRT algún día. –

+0

Parece que tenemos visiones ligeramente diferentes aquí, pero voy a aceptar su respuesta por el momento, ya que no veo ningún otro punto que tenga sentido. ¡Gracias! –

Cuestiones relacionadas