C #: реализация или альтернатива StrCmpLogicalW в shlwapi.dll
Для естественной сортировки в моем приложении я в настоящее время запускаю функцию P / Invoke под названием StrCmpLogicalW в shlwapi.dll. Я думал о том, чтобы попытаться запустить мое приложение под Mono, но, конечно, у меня не может быть этого P / Invoke (насколько я знаю в любом случае).
Можно ли где-нибудь увидеть реализацию этого метода, или есть хороший, чистый и эффективный фрагмент C #, который делает то же самое?
Мой код в настоящее время выглядит так:
[SuppressUnmanagedCodeSecurity]
internal static class SafeNativeMethods
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
public static extern int StrCmpLogicalW(string psz1, string psz2);
}
public class NaturalStringComparer : IComparer<string>
{
private readonly int modifier = 1;
public NaturalStringComparer() : this(false) {}
public NaturalStringComparer(bool descending)
{
if (descending) modifier = -1;
}
public int Compare(string a, string b)
{
return SafeNativeMethods.StrCmpLogicalW(a ?? "", b ?? "") * modifier;
}
}
Итак, я ищу альтернативу вышеприведенному классу, которая не использует функцию extern.