【问题标题】:c# generic argument inference [duplicate]c#泛型参数推断[重复]
【发布时间】:2012-12-31 05:52:39
【问题描述】:

可能重复:
How to use reflection to call generic Method?

我该怎么做?

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&lt;Base&gt;

标签: c# generics arguments


【解决方案1】:

那么,做某事有什么用呢?

有两种可能:

  • 你知道的不仅仅是“对象”才能在那里调用方法,那么你在编写方法时必须知道这一点。
  • 你不知道,那么你只做定义在 Object、List 上的通用东西,那么你不需要知道类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2021-11-06
    • 2020-08-15
    相关资源
    最近更新 更多