如何检测类型是否为func 并获得t的类型[重复
-
20-08-2019 - |
题
这个问题在这里已经有一个答案:
- 如何从通用类或方法的成员中获取T类型? 16个答案
我想知道我是否可以升级我使用的基本IOC容器来支持懒惰负载。因此,如果我已经注册了IFOO,我希望IOC容器知道如何实现以下两个依赖项(第一个是IOC容器的标准方式,而第二个则返回一个简单的委托,该简单委托在何时呼叫该容器中以供IFOO它被调用)。
public Bar(IFoo x)
public Bar2(Func<IFoo> lazyFoo)
当我尝试编写将实际执行此操作的代码时,问题就到了。是否存在将以下伪代码编译的语法?
public T Resolve<T>()
{
if (T is Func<X>)
return (T) () => Resolve(typeof(X));
return (T)Resolve(typeof(T));
}
或以换句话说,如果我有类型 T
, ,如何检测是否是 Func<X>
, ,如果是这样,什么是 X
?
解决方案
看看今天早上的这个问题 - 可能会给您一个良好的开始 - C#通用列表u003CT>如何获得T的类型?
其他提示
我误解了你的问题。
由于编译器必须具有代表类型来创建lambda时,因此不可能以一个函数的方式执行此操作。
但是,这应该起作用。
public T Resolve<T>()
{
return (T)Resolve(typeof(T));
}
public Func<T> LazyResolve<T>()
{
return () => Resolve<T>();
}
为了回答评论中的问题,您需要调用lambda的表达,而不是施放它。
不隶属于 StackOverflow