Поделиться через


Sorting with Cultures 

Sorting strings depends on the sort rules used to compare, and therefore order, pairs of strings. When you perform a comparison operation, you can either explicitly specify the sort rule with one or more CompareOptions enumeration values or implicitly specify a sort rule with a suitable CultureInfo object.

The .NET Framework supports word, string, and ordinal sort rules. A word sort performs a culture-sensitive comparison of strings in which certain nonalphanumeric Unicode characters might have special weights assigned to them. For example, the hyphen ("-") might have a very small weight assigned to it so that "coop" and "co-op" appear next to each other in a sorted list. A string sort is similar to a word sort, except that there are no special cases and all nonalphanumeric symbols come before all alphanumeric Unicode characters. An ordinal sort compares strings based on the numeric value of each Char object in the string. For more information about word, string, and ordinal sort rules, see CompareOptions.

The .NET Framework represents strings with the String class, and each Unicode character in a string with a Char structure. Cultures are represented with the CultureInfo class, and culture-specific information that pertains to a comparison is represented by the CompareInfo class. The String and CompareInfo classes are the primary sources for comparison methods. Comparison operations use the culture associated with the current thread unless specified otherwise.

When and How to Compare with Cultures

Use the following guidelines to decide whether to perform a culture-sensitive comparison.

  • If you require a sort operation that depends on a particular culture, use a comparison method that specifies a CultureInfo object or CompareOptions enumeration parameter.

  • If you require a sort operation that is not specific to a particular culture, specify the invariant culture or use an ordinal sort. For example, use an ordinal comparison to sort the names of files, mutexes, and named pipes. For more information about the invariant culture, see Using the InvariantCulture Property. For more information about an ordinal sort, see Normalization and Sorting.

  • If your application makes a security decision based on sorting strings, use an ordinal sort.

NoteImportant

Previous advice to use the invariant culture in a comparison operation that is used to make a security decision has been superseded. Use an ordinal comparison instead.

See Also

Reference

CultureInfo
CompareOptions

Concepts

Using the InvariantCulture Property
Normalization and Sorting