我简化了代码,但基本上该代码在循环上运行,并且类型来自反射。这里唯一的常量是 IWorker<T>
界面。
我需要访问 IWorker
的属性但我无法将其转换为 argType
编译器不接受,有什么想法吗?
(我可以使用动态来做到这一点,但我希望有一种替代方案来防止 future 因重构而出现错误)
Type argType = @interface.GetGenericArguments().First();
var worker = (IWorker<argType>)FormatterServices.GetUninitializedObject(MyType);
MyType
源自IWorker<T>
哪里T
在编译时未知。
最佳答案
如果可能的话,您应该使该方法通用。这是维护编译时类型安全的唯一方法。如果这不是一个选项,并且此方法必须直接接受 Type
参数,那么根据定义,您最终使用的任何解决方案都将无法维护静态类型。
public static IWorker<T> Foo<T>()
{
return (IWorker<T>)FormatterServices.GetUninitializedObject(typeof(T));
}
然后你可以这样调用它:
IWorker<ArgType> worker = Foo<ArgType>();
关于c# - 通过反射转换到泛型接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072435/