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

C#动态类型调用Body扩展方法AddText报错求助

问题解决:Dynamic类型调用扩展方法失败

问题原因

C#的扩展方法本质是静态类中的静态方法,instance.AddText()这种写法是编译器提供的语法糖,编译时会被转换成OpenXMLExtensions.AddText(instance)。但当参数是dynamic类型时,方法调用的绑定会延迟到运行时,而.NET的运行时绑定器不会自动搜索静态类中的扩展方法,因此会抛出找不到方法的异常。

解决方案

提供三种可行的解决方式,按需选择:

1. 显式调用静态扩展方法

直接绕过语法糖,以静态方法的形式调用,运行时能正确识别:

public static dynamic ProcessReportDefinition(dynamic parentElement, OB.ReportDefinition.ReportItem reportItem, OB.TenableSC.Json snapshot_data, int level=0){
    // 直接调用静态类的方法,无需语法糖
    OB.OpenXMLExtensions.AddText(parentElement, "text");
}

2. 将Dynamic参数强转为具体类型

在方法内部先把dynamic类型的parentElement转换为Body类型,再调用扩展方法:

public static dynamic ProcessReportDefinition(dynamic parentElement, OB.ReportDefinition.ReportItem reportItem, OB.TenableSC.Json snapshot_data, int level=0){
    if (parentElement is DocumentFormat.OpenXml.Wordprocessing.Body body)
    {
        body.AddText("text");
    }
    // 其他逻辑
}

3. 替换Dynamic参数为具体类型

如果ProcessReportDefinition方法只处理Body类型的参数,直接把参数类型从dynamic改成Body,从根源避免动态绑定问题:

// 修改参数类型为Body
public static dynamic ProcessReportDefinition(DocumentFormat.OpenXml.Wordprocessing.Body parentElement, OB.ReportDefinition.ReportItem reportItem, OB.TenableSC.Json snapshot_data, int level=0){
    parentElement.AddText("text");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:20:32