You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dynamic对象创建泛型类实例时触发RuntimeBinderException异常求助

问题排查与解决

异常原因

触发的RuntimeBinderException核心问题是**MethodInfo.Invoke的参数类型不匹配**:
Invoke的第二个参数要求传入object[]类型(用来承载目标方法的所有参数),但你直接传了单个dynamic类型的obj。由于obj是动态类型,编译器无法在编译阶段做类型校验,运行时动态绑定找不到匹配的Invoke重载,因此抛出异常。

修复方案

把obj包装成object[]数组传入Invoke即可;如果需要接收方法返回值,可将Invoke的结果强转为对应类型(这里是int)。

修正后的完整代码

using System;
using System.Dynamic;

public class Program
{
    public static void Main()
    {
        dynamic obj = new ExpandoObject();
        obj.num = 1;
        obj.str = "a";

        Type t = obj.GetType();
        Type myType = typeof(RulesService<>).MakeGenericType(t);
        object instance = Activator.CreateInstance(myType, 999);

        // 将obj包装为object[]数组传入Invoke
        int result = (int)myType.GetMethod("GetMatchingRules")
            .Invoke(instance, new object[] { obj });
            
        Console.WriteLine($"方法返回值: {result}");
    }
}

public class RulesService<T>
{
    private readonly int _retNum = 0;

    public RulesService(int retNum)
    {
        _retNum = retNum;
    }

    public int GetMatchingRules(T objectToMatch)
    {
        Console.WriteLine("GetMatchingRules");
        return _retNum;
    }
}

额外说明

如果目标方法有多个参数,只需把所有参数按顺序放入object[]数组即可,比如new object[] { param1, param2, param3 }。

内容的提问来源于stack exchange,提问作者Lena Brenner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:15:35