PCL 내에서 문자열에 .Select()
Linq 확장 메서드를 호출하려고하는데 프로젝트를 컴파일 할 수 없습니다. 별도의 이동이 불가능한 프로젝트의 문자열에 .Select()
을 호출하면 컴파일이 가능합니다. .Select()
은 this IEnumerable<TSource> source
입니다. 문자열 (및 문자열) 유형은 IEnumerable
을 .NETPortable 어셈블리 안에 구현하므로 .Select()
을 사용할 수없는 이유는 무엇입니까? 어떤 이유에서든 컴파일러가 암묵적으로 문자열을 PCL이있는 문자 배열로 변환 할 수 있습니까?.NET Portable - 문자열에서 .Select() 호출
답변
컴파일러는 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>()
)로 전송할 수 있습니다.
또는'string.ToCharArray' (사용 가능한 경우) – TheLethalCoder
이 경우에 Cast 사용에 대한 좋은 점은'string'이'IEnumerable
'using System.Linq;'를'using' 지시자에 추가 했습니까? –
어쩌면 꽤 복잡하지는 않지만 여전히 관련이 있습니다. http://stackoverflow.com/questions/11557690/why-doesnt-string-class-implement-ienumerablechar-in-portable-library – Abion47
IEnumerable 및 IEnumerable은 서로 다른 인터페이스입니다. –
Peter