1

我将动态对象的属性名称分配为字符串形式的整数。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();

有谁知道这个问题的简单解决方案,或者你推荐一种不同的方法?谢谢。

4

1 回答 1

4

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

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

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


编辑:

我相信,鉴于您的方法,您需要转换为字典:

return disorderedList
          .OrderBy(o => ((IDictionary<string, object>)o)[propertyName]).ToList();
于 2014-08-06T17:53:09.557 回答