C#中1 + "2"的执行逻辑是什么?为何未触发编译错误?
C#中
1 + "2"未触发编译错误的原因解析 你的理解偏差在于混淆了类型赋值的强类型检查和预定义运算符重载这两个不同场景:
- 你之前了解的“无法将整数值赋值给bool类型”属于变量赋值时的强类型约束,C#在这类场景下会严格检查类型兼容性,禁止无意义的隐式转换。
- 而
var add = 1 + "2"的情况,是C#对+运算符的预定义重载行为:- 当
+的两个操作数中有一个是string类型时,C#会自动将另一个非字符串类型的操作数隐式转换为string,然后执行字符串拼接操作。 - 所以这段代码实际执行的是
"1" + "2",最终得到字符串结果"12"(你提到的“结果为12”是表述误差,实际是字符串类型的"12")。
- 当
C#的类型安全并非完全禁止所有隐式转换,而是在保证类型安全的前提下,允许一些符合逻辑、能提升开发效率的预定义转换和运算符重载。
内容的提问来源于stack exchange,提问作者Aman singh Parihar
相关产品推荐
相关产品推荐

