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

为何编译器返回dynamic而非指定的MyClass类型?

问题原因及解决方法

这是因为dynamic类型的传播特性:当方法参数为dynamic类型时,整个方法调用会被当作动态调用处理——编译器不会在编译阶段解析目标方法的返回类型,而是将返回值推断为dynamic,直到运行时才会确定实际类型。

对应到你的代码场景:

  • Do方法的参数data是dynamic类型
  • 调用MyParser.Parse(data)时,由于传入的参数是dynamic,编译器会将这个调用标记为动态操作,不会在编译期确认Parse方法的返回类型是MyClass
  • 因此var parsedObj会被推断为dynamic,而非编译时就能确定的MyClass

如果想让parsedObj在编译时就被推断为MyClass,可以用这两种方式处理:

  • 将data的类型从dynamic改为具体类型(如果业务场景允许确定类型)
  • 对dynamic参数做显式转换,或者直接指定变量类型:
    // 方式1:显式转换参数类型
    var parsedObj = MyParser.Parse((object)data);
    // 方式2:直接指定变量类型
    MyClass parsedObj = MyParser.Parse(data);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:55:16