对于我的应用程序中的自然排序,我目前在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