I는 다음 내용을 실행할 경우string.Compare가 악센트 부호가있는 문자를 일관성 없게 처리하는 이유는 무엇입니까?
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
결과는 '-1', 'MUN가'MUN '보다 낮은 수치를 갖는 것을 나타낸다. 나는이 문장 실행하면
그러나 :
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
내가 할 '를 Muntelier, Schewiz은'마지막가는 것을 나타내는, '1'.
비교에 버그입니까? 또는, 가능성,
이이 문제가되는 이유는 을 강조 포함하는 문자열을 정렬 할 때 나는 고려되어야 할 규칙은, 내가 목록을 정렬하고 의미있어 수동 바이너리 필터를하고있어이 'xxx'로 시작하는 모든 문자열을 가져옵니다.
이전에 Linq 'Where'방법을 사용했지만 다른 사람이 작성한이 사용자 지정 함수를 사용해야합니다. 왜냐하면 더 나은 성능을 발휘하기 때문입니다.
그러나 사용자 지정 함수는 .NET에있는 '유니 코드'규칙을 고려하지 않습니다. 'mun'으로 시작하는 목록에 항목이 있어도 'mun'으로 필터링하도록 말하면 항목을 찾지 못합니다.
이것은 악센트 부호가있는 문자 다음에 오는 문자에 따라 악센트 부호가있는 문자의 순서가 일치하지 않기 때문인 것으로 보입니다.
그래, 문제가 해결 된 것 같습니다.
필터 전에, 나는 N 검색 문자열의 길이 각 문자열의 첫 번째 N 문자를 기반으로 정렬을한다.
그것은 내가 .NET Framework를 원하는 그 같은 순간의 비교 때문에 같은 (손실 언어로 "U"에 "U"equivelent)입니다 오픈 소스 였기 때문에 디버그 모드로 들어가서 정확히 무엇을하고 있는지 파악할 수있었습니다. – Jonathan
@jonathanconway : 기본 클래스 라이브러리의 소스 코드를 단계별 것이 가능하고, 볼 http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net- framework-source-code.aspx –
@divo 참고로 감사드립니다. 이것이 가능하다는 것을 결코 깨닫지 못했습니다! – Jonathan