按属性名称(字符串值)排序列表? [复制]

2023-11-21

我有一个清单objects。如何使用属性名称订购此列表?

string orderbyField = "Code";
List<object> l = FillList();
l = l.OrderBy(o => orderbyField);

我可以为这个问题提供扩展吗?


如果您不必以字符串形式提供属性名称,那么使用非常简单dynamic:

List<object> l = FillList();
l = l.OrderBy(o => ((dynamic)o).Id);

如果属性名称必须是字符串,那么它会变得有点复杂,但可以使用反射来完成(尽管它不是很有效):

l = l.OrderBy(o => o.GetType()
                    .GetProperty("Code")
                    .GetValue(o, null));

您还应该考虑添加一些错误处理,例如如果该属性不存在。

另外,如果列表中的所有元素都具有相同的runtime类型,那么使用表达式树编译 getter 函数并重用它(而不是直接使用反射)会更有效。

public static Func<object, object> CreateGetter(Type runtimeType, string propertyName)
{
    var propertyInfo = runtimeType.GetProperty(propertyName);

    // create a parameter (object obj)
    var obj = Expression.Parameter(typeof(object), "obj");  

    // cast obj to runtimeType
    var objT = Expression.TypeAs(obj, runtimeType); 

    // property accessor
    var property = Expression.Property(objT, propertyInfo); 

    var convert = Expression.TypeAs(property, typeof(object));
    return (Func<object, object>)Expression.Lambda(convert, obj).Compile();
}

并像这样使用它:

var codeGetter = CreateGetter(l[0].GetType(), "Code"); // using the 1st element as an example
l = l.OrderBy(o => codeGetter(o));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按属性名称(字符串值)排序列表? [复制] 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • PHP 中的 A* 搜索算法 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有没有人有实施A 算法在 PHP 中 我知道维基百科有一个伪代码和一个 C 伪代码的链接 但我似乎找不到已经用 PHP 编写的伪代码 我也在寻找一种高效的书面 A 算法 None
  • 理解java 8流的过滤方法

    我最近了解到StreamJava 8 中的 s 并看到了这个示例 IntStream stream IntStream range 1 20 现在 假设我们想要找到第一个既能被 3 又能被 5 整除的数字 我们可能会filter两次并且fi
  • 具有特定类型的 Backbone.Js 集合

    我有一个名为 History 的 BackboneJS 集合 它可以包含多个 Backbone JS 模型之一 从 HistoryItem 扩展 而 HistoryItem 又从 Backbone Model 扩展 我试图找到一种在加载时重
  • 身份“iPhone Developer”与钥匙串中任何有效、未过期的证书/私钥对不匹配

    我想在设备中测试我的应用程序 但我被这个错误困扰了几个小时 身份 iPhone Developer 与钥匙串中任何有效 未过期的证书 私钥对不匹配 我已经关注了本指南 我在 stackoverflow 上搜索了类似的问题 这可能会有所帮助
  • 检查颜色是否为蓝色(ish)、红色(ish)、绿色(ish)、

    我想实现一个可以按颜色过滤图像的搜索 我的图像模型最多包含该特定图像中出现的 10 个 UIColor 现在我想要一个过滤器 例如蓝色 绿色 红色 黄色 如何检查 使用指定的容差 该特定图像是否包含蓝色 绿色 我尝试使用 CIE94 差异
  • 如何破译 boost asio ssl 错误代码?

    我在 boost asio ssl 实现中偶尔会出现通信失败 boost 返回的超级有用的错误消息是 asio ssl 336458004 我怀疑数字是由 SSL 标志组成的某种聚合构造 我说因为 linux 错误代码 boost asio
  • 从 FileSystemWatcher 错误中恢复的最佳实践是什么?

    After a FileSystemWatcher Error事件被提出 我不知道下一步该做什么 该例外可以是 相对 较小的例外 例如 目录中一次更改太多 这不会影响观察者的观看过程 但它也可能是一个大问题 例如观看的目录被删除 在这种情况
  • 如何以编程方式设置可发现时间而无需用户确认?

    我通常用这个 private void ensureDiscoverable if D Log d TAG ensure discoverable if mBluetoothAdapter getScanMode BluetoothAdap
  • 不使用 Android 导航抽屉显示叠加层

    我想知道是否可以删除最近实现的导航抽屉所做的自动覆盖 第二张图的灰色层 你只需要设置setScrimColor int color 给你的DrawerLayout mDrawerLayout setScrimColor Color WHIT
  • postgresql:共享内存不足?

    我正在使用 Python 和 psycopg2 运行大量查询 我创建了一个包含约 200 万行的大型临时表 然后使用以下命令一次从中获取 1000 行cur fetchmany 1000 并运行涉及这些行的更广泛的查询 不过 广泛的查询是自
  • 如何使用 StoreKit 2 进行恢复?

    iOS 15 引入了 StoreKit 2 我正在研究它 看看是否可以在我现有的应用程序中采用它 但我不知道该怎么做 特别是 我不知道如何实现所需的恢复功能 例如 如果用户删除了我的应用程序 我想我们应该使用Transaction late
  • 当我向 Firebase 实时数据库添加新值时如何保存当前日期/时间

    当我通过控制面板向 Firebase 实时数据库添加新值时 我想将当前日期 时间保存在特定字段中 我怎样才能做到这一点 请帮我 Answer recommended by Google Cloud Collective 最佳实践是将数据保存
  • JSP/JSTL 中的嵌套表达式

    我使用 JSP 作为视图 使用 Spring MVC 3 0 作为控制器 在我的 JSP 中 我想显示当前的日期时间 为此我有以下代码
  • Linux 内核模块字符设备权限

    是否可以在以 mod 666 启动的 Linux 内核模块中创建字符设备 现在它总是 600 由 root 拥有 我必须 chmod 它 我可以创建 udev 条目来解决它 但我真的宁愿模块自动执行它 是否可以 我在 cdev init 或
  • 异步/等待返回 Promise { } [重复]

    这个问题在这里已经有答案了 我的问题是 尽管我使用了 async await 为什么这个日志还是 promise pending 我检查了类似的问题和答案 看起来应该没问题 但事实并非如此 我该如何改变它才能得到结果 为什么 谢谢 cons
  • 带有 CloudFront 的区域 API 网关

    亚马逊发布新功能 支持区域 API 端点 这是否意味着我可以在两个区域部署相同的 API 代码 并向 Lambda 微服务发送请求 这将是两个不同的 Https 端点 CloudFront 是否为我分配流量 有代码片段吗 这是否意味着我可以
  • DART HTTP 服务器中带有 SSL 证书的 HTTPS

    Dart HTTP 服务器支持 HTTPS 吗 如果是这样 您如何指定证书 如果没有 是否有其他替代方案 例如社区创建的包 是的 Dart 支持 https 查看文档here和一个测试here 相关线路 HttpServer bindSec
  • 为图层属性设置动画以简单地更改其他属性?

    想象一个CAGradientLayer 制作动画非常容易 startPoint and endPoint 现在想象一个漂浮物spinLike这只是同时设置它们 因此 您可以简单地制作动画 而不是使用两个不同的动画spinLike 所以像 c
  • 如何忽略地图框图层上的鼠标事件

    我在 Mapbox 地图上构建了一个标记 当用户将鼠标悬停在其上时 该标记如下所示 我遇到的问题是文档图标是与背景图钉不同的层 这样用户就可以上传自定义图标 当使用mouseover and mouseleave事件在背景图钉层上创建悬停弹
  • 按属性名称(字符串值)排序列表? [复制]

    这个问题在这里已经有答案了 我有一个清单objects 如何使用属性名称订购此列表 string orderbyField Code List l FillList l l OrderBy o gt orderbyField 我可以为这个问