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

为何dynamic对象与类对象执行+运算时会调用字符串拼接?

dynamic对象与自定义类相加的行为解析

先贴出你的示例代码:

static void Main()
{
    dynamic dynamicObject = null;
    object simpleObject = dynamicObject + new AnyClass();
    Console.WriteLine(simpleObject);
}

class AnyClass
{
    public override string ToString()
    {
        return "text";
    }
}

执行结果:

text

核心原因解析

之所以没有抛出异常且得到text结果,关键在于**.NET中string类型的+运算符包含接受object参数的重载**:

public static string operator + (object? left, object? right);

当dynamic参与运算时,绑定逻辑是在运行时完成的,而非编译时:

  • 运行时识别到dynamicObject实际为null(属于object类型的null),new AnyClass()也是object实例。
  • 由于没有自定义的+运算符适配这两个类型,运行时会匹配到string的上述重载。
  • 这个重载会自动将两个object参数转换为字符串:null直接转为空字符串,AnyClass实例通过调用ToString()得到"text"。
  • 最终执行空字符串与"text"的拼接,得到结果"text"。

你的猜测方向是对的,只是没意识到string的+运算符本身就支持直接传入object参数,不需要显式触发ToString()——这个重载内部已经帮你完成了类型转换和方法调用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:52:47