Pour le tri naturel dans mon application, je P/Invoke actuellement une fonction appelée StrCmpLogicalW dans shlwapi.dll. Je pensais essayer de faire fonctionner mon application sous Mono, mais bien sûr je ne peux pas avoir ce truc de P/Invoke (pour autant que je sache de toute façon).C#: Implémentation de, ou alternative à StrCmpLogicalW dans shlwapi.dll
Est-il possible de voir l'implémentation de cette méthode quelque part, ou y a-t-il un bon extrait C# propre et efficace qui fait la même chose?
Mon code ressemble actuellement à ceci:
[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;
}
}
Alors, ce que je suis à la recherche est une alternative à la classe ci-dessus qui n'utilise pas une fonction externe.
Je viens de découvrir ce [blog sur le tri naturel] (http://www.interact-sw.co.uk/iangblog/2007/ 12/13/natural-tri) en C#. Est-ce utile? En réponse à votre commentaire - je ne l'ai pas analysé en détail moi-même, c'était juste prometteur. Il doit y avoir d'autres implémentations de C# de tri naturel là-bas, peut-être vous avez juste besoin d'en trouver un et de le profiler? – ChrisF
Juste fini de le lire en fait: P Il semblait faire ce que je pense qu'il devrait, mais il semble aussi tout à fait inefficace ... Je ne sais pas vraiment si ... hehe. – Svish