【发布时间】:2012-12-31 05:52:39
【问题描述】:
我该怎么做?
class A {}
void DoSomething<T, U> where T : List<U> {}
object o = new List<A>();
DoSomething(o); // cannot be inferred from usage error
直到运行时我才知道 A 的确切类型。
只是为了澄清。我无权更改 DoSomething 方法。我知道下面的电话会起作用
DoSomething(o as List<A>);
但直到运行时我才知道 A。虽然我知道所有的 As 都会有一个共同的子类。
【问题讨论】:
-
您可能需要考虑将您的类型限制为某些接口,然后强制转换为这些接口,以便您可以采取任何您需要的操作。
-
好的 - 对我来说听起来像是重复的。我认为唯一的选择是使用反射来查找类型,然后调用链接问题中描述的方法。请注意,为了有机会利用“As will have a common sub class”,您仍然需要更改
DoSomething以允许列出项目或派生类...或接受IEnumerable<Base>。