Für natürliche Sortierung in meiner Anwendung ich P/Invoke derzeit eine Funktion namens StrCmpLogicalW in shlwapi.dll. Ich habe darüber nachgedacht, meine Anwendung unter Mono laufen zu lassen, aber natürlich kann ich dieses P/Invoke-Zeug nicht haben (so weit ich weiß).C#: Implementierung von oder Alternative zu StrCmpLogicalW in shlwapi.dll
Ist es möglich, die Implementierung dieser Methode irgendwo zu sehen, oder gibt es ein gutes, sauberes und effizientes C# -Snippet, das dasselbe tut?
Mein Code sieht derzeit wie folgt aus:
[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;
}
}
Also, was ich suche eine Alternative zu der obigen Klasse ist, die keine externe Funktion nicht verwendet.
Ich fand gerade diese [Blog-Post auf natürliche Sortierung] (http://www.interact-sw.co.uk/iangblog/2007/ 12/13/natürliche Sortierung) in C#. Ist das von Nutzen? Als Antwort auf Ihren Kommentar - ich habe es nicht sehr detailliert analysiert, es sah einfach vielversprechend aus. Es muss andere C# Implementierungen der natürlichen Sortierung da draußen geben, vielleicht müssen Sie nur einen finden und es profilieren? – ChrisF
Gerade fertig gelesen es tatsächlich: P Es schien zu tun, was ich denke, dass es sollte, aber es scheint auch ziemlich ineffizient ... Ich weiß es nicht wirklich ... hehe. – Svish