Para la ordenación natural en mi aplicación, actualmente P/Invoco una función llamada StrCmpLogicalW en shlwapi.dll. Estaba pensando en intentar ejecutar mi aplicación bajo Mono, pero luego, por supuesto, no puedo tener esta información de P/Invoke (hasta donde sé de todos modos).C#: Implementación de, o alternativa a, StrCmpLogicalW en shlwapi.dll
¿Es posible ver la implementación de ese método en alguna parte, o hay un fragmento de C# bueno, limpio y eficiente que hace lo mismo?
Mi código actualmente se ve así:
[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;
}
}
Por lo tanto, lo que estoy buscando es una alternativa a la clase anterior que no utiliza una función extern.
simplemente me encontré con este [blog en la clasificación natural] (http://www.interact-sw.co.uk/iangblog/2007/ 12/13/natural-sorting) en C#. ¿Esto es de alguna utilidad? En respuesta a su comentario, no lo analicé en gran detalle, simplemente parecía prometedor. Debe haber otras implementaciones de C# de clasificación natural, quizás solo necesite encontrar una y perfilarla. – ChrisF
Acabo de leerlo en realidad: P Pareció hacer lo que creo que debería, pero también parece bastante ineficiente ... Aunque no lo sé realmente ... jeje. – Svish