You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问ExpandoObject的Dynamic View数据并使集合直接对应该视图结构

如何访问ExpandoObject的Dynamic View数据并使集合直接对应该视图结构

嘿,我完全懂你的需求——你用ExpandoObject构建了一个数据集合,但想直接像调试器里的Dynamic View那样,用直观的属性访问方式操作数据,而不是每次都要把它当作IDictionary<string, object>或者ExpandoObject来处理,对吧?

其实解决方法很简单,核心就是利用C#的dynamic类型来匹配调试器里的Dynamic View行为:

第一步:修改集合的声明类型

把原来的List<object>改成List<dynamic>,这样集合里的每个ExpandoObject都会被当作动态类型处理,直接支持属性访问:

List<dynamic> example = new List<dynamic>();

第二步:保持原有构建逻辑不变

你原来构建ExpandoObject的代码不需要改动,因为ExpandoObject可以隐式转换为dynamic类型,直接添加到集合里就行:

foreach (var rate in rates)
{
    var rateObject = new ExpandoObject() as IDictionary<string, object>;
    rateObject["Id"] = rate.Id;
    rateObject["RateType"] = rate.RateType;
    rateObject["Units"] = rate.R6Item.Unit.Symbol;
    rateObject["Schedule"] = rate.R6Item.Schedule.Description;
    rateObject["R6Code"] = rate.R6Item.Code;
    rateObject["R6Description"] = rate.R6Item.Description;
    rateObject["R7Code"] = rate.R7Item.Code;
    rateObject["R7Description"] = rate.R7Item.Description;
    rateObject["DICODE"] = rate.R6Item.Schedule.Discipline.Code;

    foreach (var currency in rate.Project.ProjectCurrencies)
    {
        rateObject[currency.Currency.Name] = currency.Currency.Name;
    }

    example.Add(rateObject); // 直接添加,自动转为dynamic
}

第三步:直接像Dynamic View那样访问属性

现在你可以完全按照调试器里展示的结构,用点语法直接访问属性了:

// 访问固定属性
var firstId = example[0].Id;
var firstRateType = example[0].RateType;

// 访问动态添加的货币属性(比如USD、EUR这类)
var usdValue = example[0].USD;

额外小技巧:检查属性是否存在

如果担心某些动态属性可能不存在,你可以把dynamic对象转回IDictionary<string, object>来做存在性检查:

dynamic item = example[0];
var itemDict = item as IDictionary<string, object>;
if (itemDict.ContainsKey("USD"))
{
    var usdValue = item.USD; // 或者 itemDict["USD"]
}

原理其实很简单:调试器里的Dynamic View本质就是把ExpandoObject当作动态类型,展示它所有的键值对作为属性。而用dynamic类型声明集合,就是让编译器在运行时解析这些属性访问,和调试器的展示逻辑完全对齐,这样你就不用再绕弯子处理字典结构了。

备注:内容来源于stack exchange,提问作者lross33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:47:57