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

C#如何通过反射对特定类型字段调用指定方法?

解决方案

你的问题核心是混淆了FieldInfo和字段的实际实例对象:FieldInfo只是描述字段的元数据,不是字段存储的对象本身,所以直接把它传给MethodInfo.Invoke肯定会失败。

正确的操作步骤:

  • 遍历匹配目标类型的字段元数据(FieldInfo)
  • 通过FieldInfo.GetValue(this)获取该字段在当前实例中的实际对象实例
  • 以这个实际对象作为调用目标,执行指定方法

修正后的完整代码:

var fields = this.GetType().GetFields(BindingFlags.NonPublic | 
                            BindingFlags.Instance).Where(x => x.FieldType == typeof(IMyType));

foreach (var field in fields)
{
    // 获取字段对应的实际对象实例
    var fieldInstance = field.GetValue(this);
    if (fieldInstance == null) continue; // 避免未初始化字段导致空引用

    var myMethod = typeof(ITenantService).GetMethod("MyMethod");
    var test = myMethod?.Invoke(fieldInstance, new object[]
    {
        myParameter
    });
}

额外提示:

  • 请确保IMyType类型的字段实例确实实现了ITenantService接口,否则GetMethod会返回null,方法调用不会执行。
  • 增加空值判断可以避免字段未赋值时出现的运行时异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:40:50