2016-10-27 1 views
1

PCL 내에서 문자열에 .Select() Linq 확장 메서드를 호출하려고하는데 프로젝트를 컴파일 할 수 없습니다. 별도의 이동이 불가능한 프로젝트의 문자열에 .Select()을 호출하면 컴파일이 가능합니다. .Select()this IEnumerable<TSource> source입니다. 문자열 (및 문자열) 유형은 IEnumerable을 .NETPortable 어셈블리 안에 구현하므로 .Select()을 사용할 수없는 이유는 무엇입니까? 어떤 이유에서든 컴파일러가 암묵적으로 문자열을 PCL이있는 문자 배열로 변환 할 수 있습니까?.NET Portable - 문자열에서 .Select() 호출

+2

'using System.Linq;'를'using' 지시자에 추가 했습니까? –

+1

어쩌면 꽤 복잡하지는 않지만 여전히 관련이 있습니다. http://stackoverflow.com/questions/11557690/why-doesnt-string-class-implement-ienumerablechar-in-portable-library – Abion47

+3

IEnumerable 및 IEnumerable 은 서로 다른 인터페이스입니다. – Peter

답변

4

컴파일러는 string을 암시 적으로 IEnumerable<char>으로 변환해야합니다.

이 라이브러리가 작동하는지 여부는 휴대용 라이브러리를 사용하여 대상 플랫폼에 따라 달라지며 사용 가능한 .NET Framework의 하위 집합입니다. .NET Framework 4 및 예를 들어 Xamarin을 대상으로하는 경우에는 .NET Framework 4.5.1 및 Xamarin을 대상으로하는 것과는 다른 하위 집합이 있습니다. 전자의 경우, 컴파일러는 string에서 IEnumerable<char>까지의 암시 적 캐스트를 거부하지만 후자의 경우에는 받아들입니다.

그래서 간단한 솔루션 (가능한 경우)은 .NET Framework 4.5.1 이상을 대상으로합니다. 그렇지 않으면 문자열을 일련의 문자 (예 : .Cast<char>())로 전송할 수 있습니다.

+0

또는'string.ToCharArray' (사용 가능한 경우) – TheLethalCoder

+1

이 경우에 Cast 사용에 대한 좋은 점은'string'이'IEnumerable '을 구현하는 플랫폼에서 캐스트가 실제로 아무것도하지 않는 반면 ToCharArray는 새로운 정렬. 반면에, 예, 캐스트 자체가 비쌀 수 있습니다. – Georg