C# 中的自然排序顺序

2024-02-01

任何人都拥有良好的资源或提供 C# 自然顺序排序的示例FileInfo大批?我正在实施IComparer我喜欢的界面。


最简单的方法就是 P/Invoke Windows 中的内置函数,并将其用作您的比较函数IComparer:

[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);

迈克尔·卡普兰有一些该函数如何工作的示例在这里 http://www.siao2.com/2006/10/01/778990.aspx,以及为使其工作更加直观而对 Vista 所做的更改。此功能的优点是,它将具有与其运行的 Windows 版本相同的行为,但这确实意味着它在 Windows 版本之间有所不同,因此您需要考虑这对您来说是否是一个问题。

所以一个完整的实现应该是这样的:

[SuppressUnmanagedCodeSecurity]
internal static class SafeNativeMethods
{
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    public static extern int StrCmpLogicalW(string psz1, string psz2);
}

public sealed class NaturalStringComparer : IComparer<string>
{
    public int Compare(string a, string b)
    {
        return SafeNativeMethods.StrCmpLogicalW(a, b);
    }
}

public sealed class NaturalFileInfoNameComparer : IComparer<FileInfo>
{
    public int Compare(FileInfo a, FileInfo b)
    {
        return SafeNativeMethods.StrCmpLogicalW(a.Name, b.Name);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的自然排序顺序 的相关文章

  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 在Python上获取字典的前x个元素

    我是Python的新手 所以我尝试用Python获取字典的前50个元素 我有一本字典 它按值降序排列 k 0 l 0 for k in len dict d l 1 if l lt 51 print dict 举个小例子 dict d m
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 如何使用 Rrank() 函数创建新的ties.method? [复制]

    这个问题在这里已经有答案了 我试图按人口和日期排序这个数据框 所以我使用order and rank 功能 gt df lt data frame idgeoville c 5 8 4 3 4 5 8 8 date c rep 1950 4
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其

随机推荐

  • 如何使用C++连接mySQL数据库

    我正在尝试从我的网站连接数据库并使用 C 显示一些行 所以基本上我正在尝试创建一个应用程序 从我的站点数据库的表中执行选择查询 现在 这一定是可能的 因为我已经看到大量的应用程序这样做了 我该怎么做呢 有人可以举个例子并告诉我应该使用哪些库
  • 如何在SQL Server中显示小数点后两位数

    我有一个表 其中有一列float数据类型输入SQL Server我想归还我的float具有 2 位小数的数据类型列值 例如 如果我插入12 3 它应该返回12 30 如果我插入12 它应该返回12 00 select cast your f
  • 使用 strope js 基于 Javascript 的 XMPP 聊天客户端 - 示例和教程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想制作一个简单的基于 javascript 的 XMPP 客户端 我偶然发现了 strope js
  • MYSQL - 使用联接删除查询

    我已经检查了已回答的问题 但是 解决方案对我不起作用 DELETE FROM TEST2 INNER JOIN TEST1 on TEST1 FIELD2 TEST2 FIELD2 WHERE TEST1 FIELD1 22 当我执行此查询
  • Bash 中循环遍历带有空格的目录

    在 bash 脚本中 我想迭代当前工作目录中的所有目录并对它们执行操作 它们可能包含特殊符号 尤其是空格 我怎样才能做到这一点 我有 for dir in ls l do if d dir 但这会跳过我的名称中带有空格的目录 任何帮助表示赞
  • 通过 AutoMapper 将 IList 映射到 ICollection

    public class Order public int OrderId get set public string OrderCode get set public IList
  • 选择元素上的省略号在 IE9 和 Chrome 中不起作用

    我有一个具有指定宽度的选择列表 文本溢出 省略号仅适用于 Firefox v15 它不适用于 IE7 IE9 和 Chrome IE7 IE 9 和 Chrome 是否支持文本溢出 省略号 如果是的话 我在这里缺少什么 有没有办法获得类似的
  • 当返回对象的函数在没有 return 语句的情况下结束时会发生什么

    在 C 中 当应该返回对象的函数在没有 return 语句的情况下结束时会发生什么 返回什么 e g std string func 返回什么 我们不知道 根据标准 该行为是未定义的 6 6 3 2 返回语句 stmt return htt
  • AVPlayer 在 iOS 10 上无法立即播放视频,而仅播放音频

    我正在使用 AVAssetExportSession 创建视频并在完成后播放视频 但视觉部分没有立即显示 而只有音频立即播放 视觉部分在大约 20 30 秒的延迟后出现 这是我播放视频的代码 void playUrl NSURL vUrl
  • Google应用程序引擎,静态文件的最大数量?

    我正在谷歌应用程序引擎中开发一个应用程序 它将具有用户配置文件类型的功能 我在浏览Google App的在线教程时发现静态文件 应用程序文件和静态文件 的最大数量不应超过3000 我担心当用户数量增加时用户是否能够上传他们的图像 此限制仅适
  • VBScript 将文件上传到 SharePoint DocLib

    我正在尝试自动将文件上传到 SharePoint 文档库 我已经看过无数的帖子 在这个论坛和其他论坛上 但似乎找不到有用的东西 我并不是真正的开发人员 尽管我已经完成了一些简单的 VBA 和 VB 脚本 我正在寻找的是一种自动将文件 特别是
  • JDBC 批量插入、返回 ID

    有没有办法使用 RETURNING INTO 获取受影响行的值 我必须插入相同的行 x 次并获取插入行的 id 该查询如下所示 public static final String QUERY FOR SAVE DECLARE result
  • 在 Python 中划分 2 个列表时如何处理列表推导式中除以零的异常

    在 Python 中划分 2 个列表时 如何处理列表推导式中除以零的异常 从下面的例子来看 from operator import truediv result list map truediv i for i in list1 j fo
  • 有哪些优秀的高级管理 EC2 工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java 以单例模式进行同步

    是否需要将同步关键字应用于像这样实现单例模式的类的每个方法 public class Singleton private Singleton public synchronized static Singleton getInstance
  • 此版本的 CLI 仅与 Angular 版本 ^13.0.0 兼容,但找到了 Angular 版本 12.2.13

    My Ionic https en wikipedia org wiki Ionic mobile app framework 一个月前项目运行良好 今天当我尝试时ionic serve or ionic build 我收到以下错误 哪个
  • “对象”不包含“名称”的定义

    我使用两个 DataContext 对象返回单独的 AsQueriable 数据集 然后使用 linq 连接这两个数据集 数据构造工作完美 但是当我将组合数据集传递到视图时 我收到错误 对象 不包含 名称 的定义 在调试会话期间 我可以清楚
  • Java 缓冲图像 RescaleOp 透明度问题

    我似乎遇到了一个问题 我创建了一个具有如下透明像素的 BufferedImage BufferedImage buff new BufferedImage i getWidth null i getHeight null BufferedI
  • .NET Framework 项目上的 dotnet 恢复不起作用

    我有一个 NET 项目 其中包含以下内容 csproj
  • C# 中的自然排序顺序

    任何人都拥有良好的资源或提供 C 自然顺序排序的示例FileInfo大批 我正在实施IComparer我喜欢的界面 最简单的方法就是 P Invoke Windows 中的内置函数 并将其用作您的比较函数IComparer DllImpor