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

基于具体类型调用泛型重载的问题及递归容器合并需求

C#泛型重载递归调用问题

问题复现代码

void Foo<T>(List<T> s) => s.ForEach(Foo);

void Foo(int t) => Console.WriteLine("int: {0}", t);

void Foo<T>(T t) => Console.WriteLine("T: {0}", t);

Foo(3);
Foo('a');
List<int> s = new List<int> { 1, 3 };
Foo(s);

实际输出

int: 3
T: a
T: 1
T: 3

预期输出

int: 3
T: a
int: 1
int: 3

当前问题核心:希望泛型方法Foo<T>(List<T> s)在遍历元素时,能根据T的具体类型(如int)自动匹配对应的非泛型重载Foo(int t),而非总是回退到泛型重载Foo<T>(T t),且无需手动编写Foo(List<int> s)这类与泛型实现完全一致的重复代码。

业务需求场景

实际要实现支持递归容器类型的Union方法,已定义以下重载:

ISet<T> Union<T>(ISet<T> a, ISet<T> b);
IDictionary<T, U> Union<T, U>(IDictionary<T, U> a, IDictionary<T, U> b);

T Union<T>(T a, T b); // 非容器类型的回退重载,用于终止递归

期望处理IDictionary<string, ISet<string>>这类嵌套容器类型时,方法能自动递归触发对应重载,完成深层的合并操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:07