C# + 运算符默认为字符串 + 对象

本文关键字:字符串 对象 默认 运算符 | 更新日期: 2023-09-27 18:31:55

我注意到在 C# 中,+ 运算符在左侧取一个字符串,在右边取一个对象:

string output = "" + numbers.ElementAt(0); 
//vs
string output = numbers.ElementAt(0).ToString();

为什么默认行为是接受右侧的对象而不是字符串?当我查看其他 + 运算符时,例如 int,它是 int/int 而不是 int/object 的强类型。

我知道在 C# 中所有对象都有 ToString() 方法,这只是一种无需调用的方法.上面第一个示例中的 ToString() ?

C# + 运算符默认为字符串 + 对象

为什么默认行为是接受右侧的对象而不是字符串?

首先,有一个接受两个字符串的重载,如果你传递两个字符串,那就是将使用的重载,所以这是默认行为。 但是,如果您传递字符串和非字符串,则将使用(字符串,对象)重载。

至于为什么会有这种重载,这是因为 C# 语言设计者认为将字符串连接到任何对象都是完全明智的,并且对于任何类型的对象都有合理的实现。

当我查看其他 + 运算符时,例如 int,它是 int/int 而不是 int/object 的强类型。

您将如何实现operator +(int, object)重载? 与字符串连接不同,我在这里没有看到任何好的实现。

我知道在 C# 中所有对象都有 ToString() 方法,这只是一种无需调用的方法.上面第一个示例中的 ToString() ?

如果对象为 null,它实际上有效,而您的解决方案则不工作。 如果你要考虑到这一点,那么是的,这基本上就是重载所做的一切。

这只是

一种消除调用需求的方法。上面第一个示例中的 ToString()

是的。

字符串串联会自动将非字符串转换为字符串。

来源:C# 语言规范:加法运算符,MSDN。