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

.NET Core 不使用dynamic类型条件赋值列表构造负载的实现方案

C# 不使用dynamic实现条件赋值可变列表的方案

你可以根据实际业务场景选择以下静态类型方案,既兼容放入Dictionary<string, object>的需求,也能保证后续列表计算的类型安全:

方案1:使用IEnumerable<object>作为类型(仅需读取遍历场景)

如果后续仅需要对列表做遍历、LINQ查询等只读操作,优先选择该方案,兼容所有实现了枚举接口的集合类型:

IEnumerable<object> finalList;
if(condition)
{
    finalList = new List<object>() { /* 填充你的元素 */ };
}
else
{
    // 如果ExistingList不是泛型集合,添加.Cast<object>()做类型转换即可
    finalList = ExistingList.Cast<object>();
}

后续放入字典的代码不需要做任何修改,直接使用即可。

方案2:使用IList<object>作为类型(需增删改列表场景)

如果后续需要对finalList做添加、删除元素等修改操作,选择该方案:

IList<object> finalList;
if(condition)
{
    finalList = new List<object>() { /* 填充你的元素 */ };
}
else
{
    // 统一转换为List<object>保证可修改
    finalList = ExistingList.Cast<object>().ToList();
}

方案3:使用强类型泛型集合(元素类型统一场景)

如果两个分支返回的列表元素类型完全一致,例如都是自定义业务类、都是字符串等,直接使用对应类型的泛型列表,可获得完整的编译期类型检查和智能提示:

// 示例为元素类型是string的场景,可替换为你实际的元素类型
List<string> finalList;
if(condition)
{
    finalList = new List<string>() { /* 填充你的元素 */ };
}
else
{
    // 若ExistingList已经是List<string>可直接赋值,否则调用.ToList()转换
    finalList = ExistingList.ToList();
}

方案优势

  • 完全规避dynamic带来的运行时类型错误风险,所有类型问题编译期即可发现
  • 后续对列表做操作时可正常使用智能提示,不需要手动记忆成员名称
  • 没有dynamic的运行时类型解析开销,性能更优

内容的提问来源于stack exchange,提问作者pr0mpT_07

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:01