基于具体类型调用泛型重载的问题及递归容器合并需求
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
相关产品推荐
相关产品推荐

