J'ai une liste de chaînes UTF-8 que je veux trier en utilisant Enumerable.OrderBy. Les chaînes peuvent contenir n'importe quel nombre de jeux de caractères - par exemple, anglais, allemand et japonais, ou un mélange d'entre eux, même.StringComparer.CurrentCulture est-il le bon choix à utiliser dans ce cas?
Par exemple, voici une liste d'entrée échantillon:
["東京","North 東京", "München", "New York", "Chicago", "大阪市"]
Je suis confus quant à savoir si l'utilisation StringComparer.CurrentCulture est le paramètre de comparaison de chaîne de droite pour passer à OrderBy()
. Que faire si la culture actuelle de l'application est en-US
mais je veux toujours trier les données UTF-8 "correctement" au-delà des règles de tri en-US
? Ma confusion provient probablement de ma compréhension de la fonction NLSSORT dans Oracle qui ne correspond pas tout à fait à la comparaison de chaînes .NET et à la sémantique de tri. Par exemple, la définition de NLS_SORT = Japanese_M signifie qu'il trierait correctement le latin, l'européen de l'ouest et le japonais, indépendamment du fait qu'un ou tous les caractères apparaissent dans une chaîne donnée dans la colonne triable.
Vous dites que InvariantCulture est mon meilleur pari, mais ensuite le nier avec la citation de MSDN, dans ce cas, vous êtes d'accord avec nobugz, et je suggère que j'utilise CurrentCulture. Est-ce exact? –
Non. Comme je l'ai dit, ce que vous faites semble tomber dans l'exception, donc je pense que la citation MSDN supporte l'utilisation de InvariantCulture dans ce cas précis. nobugz serait correct si la culture locale prédomine, mais si la liste est vraiment mélangée comme vous dites * et * est significatif pour l'utilisateur (probablement polyglotte), alors InvariantCulture est le meilleur choix. –