Gdybym wykonać następujące oświadczenie:Dlaczego string.Compare wydaje się obsługiwać znaki akcentowane niekonsekwentnie?
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Rezultatem jest „-1”, wskazując, że „mun” ma mniejszą wartość liczbową niż „Mun”.
Jednakże, jeśli mogę wykonać to stwierdzenie:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
I get '1', wskazując, że 'Muntelier, Schewiz' powinien przejść ostatni.
Czy to błąd w porównaniu? Lub, co bardziej prawdopodobne, czy istnieje przepis powinien brać pod uwagę podczas sortowania ciągi zawierające akcentowane
Powodem jest to problem jest, mam do sortowania listy, a następnie robi ręcznego filtra binarny który oznaczał aby uzyskać każdy ciąg rozpoczynający się od "xxx".
Wcześniej używałem LINQ „gdzie” metodę, ale teraz muszę używać tej funkcji niestandardowych napisany przez inną osobę, ponieważ twierdzi, że działa lepiej.
ale funkcja zwyczaj nie wydaje się uwzględniać cokolwiek zasady „unicode” NET. Jeśli więc powiem, żeby filtrował według "mün", nie znajduje żadnych elementów, nawet jeśli na liście znajdują się elementy zaczynające się od "mun".
To wydaje się być ze względu na niespójne uporządkowania znaków diakrytycznych, w zależności od tego, które znaki iść po akcentowanym charakteru.
OK, chyba naprawiłem problem.
przed filtrem, zrobić coś w rodzaju na podstawie pierwszego n liter każdej struny, gdzie n jest długością łańcucha wyszukiwania.
To chwile tak że życzę .NET Framework był open-source, więc mogłem po prostu przejść przez tryb debugowania i dowiedzieć się, co dokładnie robi. – Jonathan
@jonathanconway: Możliwe jest przejście do kodu źródłowego biblioteki klasy podstawowej, patrz http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net- framework-source-code.aspx –
@divo Dzięki za referencje. Nigdy nie zdawałem sobie sprawy, że to możliwe! – Jonathan