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

如何将匿名类型传递给C#函数并获取其值?

问题解决思路与代码示例

你的gb实际是Dictionary<<匿名类型>, List<OHLC>>,但匿名类型无法直接作为函数参数使用,同时遍历Dictionary需要处理键值对的结构,以下是两种可行方案:

方案一:用具名类替代匿名键(推荐,类型安全)

匿名类型不能跨方法传递,先定义一个专门的季度分组键类:

public class QuarterKey
{
    public int Year { get; set; }
    public int Quarter { get; set; }

    // 必须重写Equals和GetHashCode,确保Dictionary能正确识别相同的键
    public override bool Equals(object obj)
    {
        return obj is QuarterKey key &&
               Year == key.Year &&
               Quarter == key.Quarter;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Year, Quarter);
    }
}

修改分组代码,用QuarterKey替代匿名类型:

var gb = histData.GroupBy(o => new QuarterKey
{
    Year = o.Date.Year,
    Quarter = ((o.Date.Month - 1) / 3) + 1
})
.ToDictionary(g => g.Key, g => g.ToList());

现在函数参数可以明确指定类型,内部遍历直接访问键和值:

private void DropIncompleteQuarters(Dictionary<QuarterKey, List<OHLC>> gb)
{
    // 注意:遍历Dictionary时如果要删除元素,必须先转成临时列表,避免集合修改异常
    foreach (var kvp in gb.ToList())
    {
        // 获取分组的年份和季度
        int year = kvp.Key.Year;
        int quarter = kvp.Key.Quarter;
        // 获取该季度的所有OHLC数据
        List<OHLC> quarterData = kvp.Value;

        // 这里加入你的判断逻辑,比如判断季度数据是否完整
        if (IsQuarterDataIncomplete(quarterData))
        {
            gb.Remove(kvp.Key);
        }
    }
}

方案二:不创建具名类,用dynamic简化(不推荐,无编译检查)

如果不想额外定义类,可将参数设为IDictionary<object, List<OHLC>>,通过dynamic访问匿名键的属性:

private void DropIncompleteQuarters(IDictionary<object, List<OHLC>> gb)
{
    foreach (var kvp in gb.ToList())
    {
        dynamic quarterKey = kvp.Key;
        int year = quarterKey.Year;
        int quarter = quarterKey.Quarter;
        List<OHLC> quarterData = kvp.Value;

        // 同样加入你的完整性判断逻辑
        if (IsQuarterDataIncomplete(quarterData))
        {
            gb.Remove(kvp.Key);
        }
    }
}

关键注意事项

  • 直接遍历Dictionary时不能修改原集合(如调用Remove),必须用ToList()生成临时副本再遍历,否则会抛出集合修改异常。
  • 方案一类型安全,便于后期维护和调试;方案二虽然快捷,但缺少编译时类型检查,容易引发运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:01:28