gpt4 book ai didi

c# - 如何使用反射调用具有通用返回类型的方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:29 25 4
gpt4 key购买 nike

我正在尝试调用具有通用返回类型的反射方法,如下所示:

public class SomeClass<T>
{
public List<T> GetStuff();
}

我通过调用存储库的 GetClass<T> 获得了 SomeClass 的实例通用方法。

MethodInfo lGetSomeClassMethodInfo = typeof(IRepository)
.GetMethod("GetClass")
.MakeGenericMethod(typeof(SomeClass<>);
object lSomeClassInstance = lGetSomeClassMethodInfo.Invoke(
lRepositoryInstance, null);

之后,这是我尝试调用 GetStuff 方法的地方:

typeof(SomeClass<>).GetMethod("GetStuff").Invoke(lSomeClassInstance, null)

我得到一个异常,因为该方法具有通用参数。但是,我不能使用 MakeGenericMethod 来解析返回类型。另外,如果不是 typeof(SomeClass<>)我用 lSomeClassInstance.GetType() (应该已经解析类型)GetMethod("GetStuff")返回空值!

更新

我已经找到了解决方案,很快就会发布答案。

最佳答案

无论出于何种原因,GetClass 返回的 SomeClass 实例,即使类型已解析,也不允许您调用 GetStuff方法。

最重要的是,您应该先简单地构造 SomeClass,然后再调用该方法。像这样:

typeof(SomeClass<>)
.MakeGenericType(StuffType)
.GetMethod("GetStuff")
.Invoke(lSomeClassInstance, null);

关于c# - 如何使用反射调用具有通用返回类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com