【发布时间】:2012-02-01 18:23:57
【问题描述】:
如果不诉诸反思,我正在寻找的东西可能是不可能的。如果是这样,我仍然想知道实现它的最佳方法。
基本上,这就是我希望我的代码看起来的样子:
var instance = new MyClass();
instance.Add<int, string>(x => x.ToString());
instance.Add<string, Warehouse>(x => Warehouse.LookupByName(x));
instance.Add<Warehouse, IList<Supplier>>(x => x.Suppliers());
instance.Chain(3); // should call each lambda expression in turn
我的问题是,如何将这些代表(每个都有不同的签名)存储在 MyClass 的列表中?以及如何在以后需要时调用它们,将每个参数的返回值用作下一个参数的输入参数?
MyClass 的内部很可能是一堆 List 之类的东西。但我什至不确定从哪里开始。
(本来想打电话给new MyClass<int, string, Warehouse, IList<Supplier>>(),但是因为没有“类型参数数组”,所以放弃了。)
【问题讨论】:
-
为什么不
instance.Add<int, IList<Supplier>>(x => Warehouse.LookupByName(x.ToString()).Suppliers);,甚至var supplierLookupFunction = new Func<Int, IEnumerable<Supplier>>(x => Warehouse.LookupByName(x.ToString()).Suppliers);? -
请不要在标题前加上“C# Generics:”之类的前缀。标签做得更好。