相关疑难解决方法(0)

如何使用反射来调用泛型方法?

当在编译时未知类型参数但是在运行时动态获取时,调用泛型方法的最佳方法是什么?

考虑以下示例代码 - 在Example()方法内部,GenericMethod<T>()使用Type存储在myType变量中调用的最简洁方法是什么?

public class Sample
{
    public void Example(string typeName)
    {
        Type myType = FindType(typeName);

        // What goes here to call GenericMethod<T>()?
        GenericMethod<myType>(); // This doesn't work

        // What changes to call StaticMethod<T>()?
        Sample.StaticMethod<myType>(); // This also doesn't work
    }

    public void GenericMethod<T>()
    {
        // ...
    }

    public static void StaticMethod<T>()
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

c# generics reflection

1002
推荐指数
6
解决办法
24万
查看次数

将实例化的System.Type作为泛型类的类型参数传递

标题有点模糊.我想知道的是,如果可能的话:

string typeName = <read type name from somwhere>;
Type myType = Type.GetType(typeName);

MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>();
Run Code Online (Sandbox Code Playgroud)

显然,MyGenericClass被描述为:

public class MyGenericClass<T>
Run Code Online (Sandbox Code Playgroud)

现在,编译器抱怨'找不到类型或命名空间'myType'."必须有办法做到这一点.

.net c# generics

174
推荐指数
2
解决办法
8万
查看次数

我可以将类型对象传递给泛型方法吗?

我的DataAccessLayer上有一个FindAll方法,如下所示:

public FindResult<T> FindAll<T>() where T : Entity, new()
Run Code Online (Sandbox Code Playgroud)

和一个客户端代码有一个Type []数组,它需要用来迭代调用FindAll方法,如下所示:

foreach (var type in typeArray)
{    
    var result = DataAccessLayer.FindAll<type>();
    ...
Run Code Online (Sandbox Code Playgroud)

但是编译器抱怨"预期的类型或命名空间"..有没有一种简单的方法来解决这个问题?我尝试过type.GetType()或typeof(type),但都没有用.

提前谢谢了!

.net c# generics reflection

15
推荐指数
1
解决办法
8305
查看次数

标签 统计

c# ×3

generics ×3

.net ×2

reflection ×2