c# - 通过反射转换到泛型接口(interface)

标签 c# generics reflection

我简化了代码,但基本上该代码在循环上运行,并且类型来自反射。这里唯一的常量是 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/

相关文章:

Java 反射 .getMethod int 与 Integer

javascript - 创建 SQLite 数据库时 Android Studio 1.3.1 错误

c# - 我如何连接两个具有相同基类的不同列表<T>?

C#如何动态检测泛型类型

generics - 返回通用 Vec

c# - 从通用列表<T>中删除重复项

c# - 获取可以应用于类的所有属性

c# - LINQ IEnumerable<T> 内存结构

c# - SQL 文本无法在网格 Pane 和图表 Pane 中表示

c# - 在 C# 中的一行中创建和应用 lambda