调用动态属性的属性名':不能调用property

本文关键字:调用 属性 property 不能 动态 | 更新日期: 2023-09-27 18:16:53

我将动态对象的属性名称分配为字符串形式的整数。int值表示我正在使用的数据库中的int ID。但是,如何检索分配给属性的值,如下所示:

dynamic test = new ExpandoObject()
IDictionary<string, object> proxyFiler = test as IDictionary<string, object>;
proxyFiler["four"] = 4;
proxyFiler["5"] = 5;
int r = test.four; // Works
int s = test.5; // Doesn't work

读取数据库的方法将返回一个"int",我希望能够访问该属性名称的属性值。

在此展开:如果我想做一个linq查询来根据属性名称排序动态对象列表,该怎么办?在这种情况下,我需要得到的propertyName,我已经检索作为一个字符串,例如。"15":

 return disorderedList.OrderBy(o => o.propertyName).ToList();
有人知道这个问题的简单解决方案吗?或者你能推荐一个不同的方法吗?谢谢。

调用动态属性的属性名':不能调用property

为了使dynamic以这种方式工作,密钥必须遵循c#中有效标识符名称的规则(这些规则在这个过时的MSDN页面中指定,但也在c#语言规范中指定)。单个数字(5)不是允许的标识符名称,这就是为什么它不起作用的原因。

请注意,您仍然可以通过使用类型作为字典来检索值,其方式与您填充它的方式类似。

至于你的第二个例子-你从来没有使用value,所以它没有效果。这和写int r = test.four;

是一样的
编辑:

我相信,根据您的方法,您需要强制转换为字典:

return disorderedList
          .OrderBy(o => ((IDictionary<string, object>)o)[propertyName]).ToList();