2016-10-27 3 views
1

Ich versuche, die .Select() Linq-Erweiterungsmethode für eine Zeichenfolge innerhalb einer PCL aufzurufen, aber ich kann das Projekt nicht kompilieren. Der Aufruf von .Select() an einer Zeichenfolge aus einem separaten, nicht tragbaren Projekt ist kompilierbar. Ich kann sehen, dass .Select()this IEnumerable<TSource> source einnimmt. Die String- (und String-) Typen implementieren IEnumerable innerhalb der .NETPortable-Assembly. Warum sollte also .Select() nicht verfügbar sein? Kann der Compiler aus irgendeinem Grund Zeichenfolgen nicht implizit in Zeichenfelder mit PCLs umwandeln?.NET Portable - Aufruf .Select() für eine Zeichenfolge

+2

Haben Sie 'using System.Linq;' zu Ihrer 'using' Direktive hinzugefügt? –

+1

Vielleicht nicht ganz doppelt, aber immer noch relevant: http://stackoverflow.com/questions/11557690/why-doesnt-string-class-implement-ienumerablechar-in-portable-library – Abion47

+3

IEnumerable und IEnumerable sind verschiedene Schnittstellen. – Peter

Antwort

4

Der Compiler muss implizit eine string in eine IEnumerable<char> konvertieren.

Ob dies funktioniert, hängt von den Plattformen ab, auf die Sie mit der portablen Bibliothek ausgerichtet sind, und somit, welche Teilmenge von .NET Framework verfügbar ist. Wenn Sie .NET Framework 4 und beispielsweise Xamarin als Ziel verwenden, haben Sie eine andere Teilmenge als bei .NET Framework 4.5.1 und Xamarin. Im ersten Fall wird der Compiler eine implizite Umwandlung von string zu IEnumerable<char> ablehnen, während im letzteren Fall akzeptiert wird.

Also die einfache Lösung (wenn es für Sie realisierbar ist) wäre .NET Framework 4.5.1 und höher zu zielen. Andernfalls können Sie Ihre Zeichenfolge in eine Zeichenfolge abwandeln, z. B. mit .Cast<char>().

+0

Oder 'string.ToCharArray' wenn es verfügbar ist – TheLethalCoder

+1

Die gute Sache über die Verwendung von Cast in diesem Fall ist, dass auf Plattformen, wo' string' 'IEnumerable ' implementiert, die Besetzung nichts wirklich tun wird, während 'ToCharArray' ein neues erstellen wird Array. Auf der anderen Seite, ja, die Besetzung selbst kann teuer sein. – Georg

Verwandte Themen