Ama*_*har -1 c# operators type-safety
我正在阅读有关 C# 中的类型安全的内容,例如我们如何不能将整数值分配给 bool 等,这让我做了一些实验。
我执行了一个代码片段,希望它会给出编译时错误,但它有效并提供了结果。
var add = 1 + "2"; // it gave 12 as result in C#
Run Code Online (Sandbox Code Playgroud)
如果我的理解不正确,请纠正我,并请分享任何简要解释这一点的文档链接。
之所以能够编译,是因为+声明了一个运算符,该运算符将 anyobject作为第一个参数,将 astring作为第二个参数。
语言规范说:
下面列出了预定义的加法运算符。对于数字和枚举类型,预定义的加法运算符计算两个操作数的总和。当一个或两个操作数的类型为 时
string,预定义的加法运算符会连接操作数的字符串表示形式。[...]
字符串连接:
Run Code Online (Sandbox Code Playgroud)string operator +(string x, string y); string operator +(string x, object y); string operator +(object x, string y);二元
+运算符的这些重载执行字符串连接。如果字符串连接的操作数为null,则替换为空字符串。否则,string通过调用从类型对象继承的虚拟方法,任何非操作数都将转换为其字符串表示形式ToString。如果ToString返回null,则替换为空字符串。
在您的情况下,运算符重载决策将选择上面列表中的第三个重载。它相当于1.ToString() + "2".