C#按双参数排序遇‘至少一个对象需实现IComparable’错误,如何修复?
问题修复方案
错误原因是orderby子句中使用的file.Directory是DirectoryInfo类型,该类型未实现IComparable接口,导致LINQ无法完成比较排序操作。
修复方法是改用DirectoryInfo中可比较的属性(比如字符串类型的路径或名称)来排序,具体有两种常用方式:
方式1:按目录完整路径排序
将orderby中的file.Directory替换为file.Directory.FullName,代码修改如下:
IEnumerable<string> dirs = null; dirs = (from file in (dir.EnumerateFiles("*.*", so) .Where(file => reSearchPattern.IsMatch(Path.GetExtension(file.Name)))) orderby file.Directory.FullName ascending, file.LastWriteTime ascending select file.FullName); return dirs.ToList();
方式2:按目录名称排序
如果只需要按目录的短名称排序,可改用file.Directory.Name:
IEnumerable<string> dirs = null; dirs = (from file in (dir.EnumerateFiles("*.*", so) .Where(file => reSearchPattern.IsMatch(Path.GetExtension(file.Name)))) orderby file.Directory.Name ascending, file.LastWriteTime ascending select file.FullName); return dirs.ToList();
两种方式都是利用字符串类型默认实现了IComparable接口的特性,让LINQ可以正常执行排序逻辑。
内容的提问来源于stack exchange,提问作者SimonKravis
相关产品推荐
相关产品推荐

