c# - 如何从类型转换为泛型?

标签 c# generics

你好!

给出的是这个类:

public static class FooClass<TFoo>
{
    public static TFoo FooMethod(object source)
    {
        // implementation goes here
    }
}

现在我想创建这个类:

public static class FooClass
{
    public static object FooMethod(object source, Type fooType)
    {
        var classType = typeof (FooClass<>).MakeGenericType(fooType);
        var methodInfo = classType.GetMethod("FooMethod", new[]
        {
            typeof (object)
        });
        // WHAT NOW?!
    }
}

还要提到:

  • 重载了FooMethodFooClass<TFoo> ,但我只想授予对提到的重载的访问权限(签名匹配 - 除了 paramterNames)
  • 返回类型 object会很成功
  • 我做不到FooMethodFooClass通用 - 它应该是一个“旧式”接口(interface),因为它将在反射代码中使用

最佳答案

类似于:

public static class Foo
{
    public static object FooMethod(object source, Type fooType)
    {
        return typeof(Foo<>).MakeGenericType(fooType)
            .GetMethod("FooMethod").Invoke(null, new object[] { source });
    }
}

但是 - 这种反射在紧密循环中可能很慢;如果你做这么多,我会很想扭转依赖关系,所以通用代码调用非通用代码:

public static class Foo<TFoo>
{
    public static TFoo FooMethod(object source)
    {
        return (TFoo)Foo.FooMethod(source, typeof(TFoo));
    }
}

(在非通用版本中实现)

关于c# - 如何从类型转换为泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215729/

相关文章:

java - ArrayAdapter 的泛型

c# - 增加套接字客户端中的内存使用率

c# - 在另一台显示器上工作时保持主显示器全屏显示

c# - 如何在 C# 中的类型安全集合中存储具有受限泛型类型的 Action 委托(delegate)?

java - 如何使用 E... 元素编写 Java 泛型方法并返回 List<E>

Java ArrayList不同的对象相互扩展,如何了解我检索到的对象?

c# - 您可以/应该在 c# switch 语句中抛出异常吗?

c# - 我对 Parallel.ForEach 做错了什么

c# - 将 ADO.Net 实体数据模型向导连接到 MySQL 数据库

Java 7 泛型类型推断失败