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

Unity下C#无法隐式转换List<ExpandoObject>为IDictionary的解决方法

解决Unity中ExpandoObject转IDictionary的问题及其他可选转换类型

错误原因

你的代码报错是因为GetDataFromSheet(gsp)返回的是List<ExpandoObject>集合,而你试图直接赋值给单个IDictionary<string, object>变量——两者是集合类型与单个字典类型的不匹配,并非ExpandoObject本身无法转成IDictionary的问题。

正确的显式转换方式

ExpandoObject本身就实现了IDictionary<string, object>接口,单个ExpandoObject可直接转换,核心是先处理返回的List集合:

场景1:表格只有一行数据(取第一个元素)

// 先接收返回的List集合
List<ExpandoObject> expandoList = gsh.GetDataFromSheet(gsp);

// 判空后取第一个元素转成IDictionary
if (expandoList != null && expandoList.Count > 0)
{
    // 方式1:as关键字安全转换(转换失败返回null)
    IDictionary<string, object> sheetData = expandoList[0] as IDictionary<string, object>;
    
    // 方式2:强制转换(转换失败会抛出异常,适合确定非空的场景)
    // IDictionary<string, object> sheetData = (IDictionary<string, object>)expandoList[0];
}

场景2:表格有多行数据(转成字典集合)

如果需要处理所有行,把整个List转成List<IDictionary<string, object>>:

using System.Linq; // 需要引入Linq命名空间

List<IDictionary<string, object>> sheetDataList = gsh.GetDataFromSheet(gsp)
    .Cast<IDictionary<string, object>>()
    .ToList();

其他可转换的类型

除了IDictionary,ExpandoObject还可以转换成以下类型适配不同需求:

  • dynamic类型:直接用dynamic接收,无需显式转换即可直接访问属性,但注意Unity中动态类型会有一定性能开销,不适合高频访问场景:

    dynamic leaderboardEntry = expandoList[0];
    int playerScore = leaderboardEntry.Score; // 直接通过属性名访问
    
  • 自定义强类型实体类:如果知道排行榜数据的固定结构,可以定义对应的实体类,通过序列化/反射将ExpandoObject映射到实体类上(推荐用Newtonsoft.Json,可在Unity Package Manager导入):

    // 定义排行榜实体类
    public class LeaderboardEntry
    {
        public string PlayerName { get; set; }
        public int Score { get; set; }
        public int Rank { get; set; }
    }
    
    // 转换示例
    using Newtonsoft.Json;
    
    var entryJson = JsonConvert.SerializeObject(expandoList[0]);
    LeaderboardEntry entry = JsonConvert.DeserializeObject<LeaderboardEntry>(entryJson);
    
  • Dictionary<string, object>:和IDictionary功能一致,转成具体的字典实现类,用法无差别:

    Dictionary<string, object> entryDict = (Dictionary<string, object>)expandoList[0];
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:10:37