Per l'ordinamento naturale nella mia applicazione attualmente P/Richiamare una funzione chiamata StrCmpLogicalW in shlwapi.dll. Stavo pensando di provare a eseguire la mia domanda con Mono, ma ovviamente non posso avere questa roba di P/Invoke (per quanto ne so comunque).C#: implementazione o alternativa di StrCmpLogicalW in shlwapi.dll
È possibile vedere l'implementazione di tale metodo da qualche parte, oppure c'è uno snippet C# buono, pulito ed efficiente che fa la stessa cosa?
Il mio codice attualmente appare così:
[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;
}
}
Quindi, quello che sto cercando è un'alternativa alla classe superiore, che non fa uso di una funzione extern.
Ho appena trovato questo [post sul blog ordinamento naturale] (http://www.interact-sw.co.uk/iangblog/2007/ 12/13/ordinamento naturale) in C#. È di qualche utilità? In risposta al tuo commento - non l'ho analizzato nei minimi dettagli, è sembrato promettente. Devono esserci altre implementazioni C# di ordinamento naturale là fuori, forse hai solo bisogno di trovarne una e delinearlo? – ChrisF
Ho appena finito di leggerlo in realtà: P Sembrava fare quello che penso che dovrebbe, ma sembra anche abbastanza inefficiente ... Non lo so davvero ... hehe. – Svish