gpt4 book ai didi

c# - 通过动态推断泛型类型。反射

转载 作者:太空狗 更新时间:2023-10-30 00:56:48 28 4
gpt4 key购买 nike

如有任何帮助,我们将不胜感激。我正在尝试在静态类型上实现动态对象包装器。这个包装器应该允许我在运行时动态调用静态函数。

例如:

dynamic obj = new StaticDynamicWrapper(typeof(MyStaticType));
obj.DoSomething(arg1);

就是这个意思。我获得了一些在线引用以使其适用于非泛型方法和属性,但当“DoSomething”实际上是一种泛型方法时遇到了各种问题。

例如,如果“DoSomething”的声明如下:

public static RetType DoSomething<TArg>(this TArg arg1);

或者更糟糕的是,如果做某事会导致以下签名过载...

public static RetType DoSomething<TArg>(this OtherGenericType<AnotherGenericType<TArg>> arg1);

所以我需要以这样一种方式实现 DynamicObject.TryInvokeMember,即方法调用能够在运行时根据运行时参数(即 object[] args)推断出 DoSomething 的正确封闭通用方法。换句话说,我希望能够在运行时选择正确的重载并确定调用 MakeGenericMethod 的正确类型参数。

目前最大的障碍是弄清楚如何将方法的开放泛型参数映射到参数参数声明的封闭类型参数(即 object[] args)。有谁能帮帮我吗?

感谢您的宝贵时间!

最佳答案

DLR 将推断方法重载,包括泛型。开源框架ImpromptuInterface可通过 nuget 简化 dlr calls to single method calls并为您完成所有工作。事实上它有一个基类 ImpromptuForwarder这将通过一个小的构造函数更改来完成。

using ImpromptuInterface;
using ImpromptuInterface.Dynamic;
public class StaticDynamicWrapper:ImpromptuForwarder{
public StaticDynamicWrapper(Type target):base(InvokeContext.CreateStatic(target)){
}
}

关于c# - 通过动态推断泛型类型。反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809063/

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