對於我的應用程序中的自然排序,我目前在shlwapi.dll中調用一個名爲StrCmpLogicalW的函數。我正在考慮嘗試在單聲道下運行我的應用程序,但當然我不能擁有這個P/Invoke的東西(據我所知,無論如何)。C#:在shlwapi.dll中實現或替代StrCmpLogicalW
是否有可能在某個地方看到該方法的實現,或者是否有一個好的,乾淨而高效的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;
}
}
所以,我正在尋找的是不使用外部函數上面的類的替代品。
我剛剛發現這個[上自然排序的博客文章(http://www.interact-sw.co.uk/iangblog/2007/ 12/13 /自然排序)在C#中。這有什麼用處?迴應你的評論 - 我沒有詳細分析它自己,它看起來很有希望。必須有其他的自然排序的c#實現,也許你只需要找到一個並配置它? – ChrisF 2009-10-21 16:05:35
剛剛讀完它實際上:P它似乎做我認爲應該,但它也似乎相當低效......我不知道,雖然......嘿嘿。 – Svish 2009-10-21 16:07:50