Для этого вполне может существовать управляемый способ, но я бы, вероятно, просто вызвал P / StrCmpLogicalW
.
[DllImport("shlwapi.dll", CharSet=CharSet.Unicode, ExactSpelling=true)]
static extern int StrCmpLogicalW(String x, String y);
Если вы используете эту функцию, вместо того, чтобы использовать собственную функцию сравнения, вы получите то же поведение, что и в Проводнике и других компонентах системы, использующих логическое сравнение.
Обратите внимание, однако, что это не будет работать в средах, где WinAPI недоступен (например, Windows Phone, Mono или Silverlight), может работать по-разному в разных системах и должно быть отмечено комментарием, поэтому будущий сопровождающий вашего кода знает, почему для сортировки используется P / Invoke.