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

C# + Operator defaults to string + object

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

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

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

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

这只是一种消除上面第一个示例中调用 .ToString() 的方法吗

是的。

Why is the default behavior to accept an object on the right and not a string?

嗯,首先,一个接受两个字符串的重载,如果您传递两个字符串,那就是将要使用的重载,所以这是默认行为。但是,如果您传递一个字符串和一个 non-string,那么将使用 (string, object) 重载。

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

When I look other + operators for say int, it is strongly typed for int/int instead of int/object.

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

I know in C# all objects have the ToString() method, is this just a way to remove the need to call .ToString() in the first example above?

如果对象为空,它实际上有效,而您的解决方案则无效。如果您考虑到这一点,那么是的,这基本上就是过载所做的一切。

字符串连接自动将 non-strings 转换为字符串。

来源:C# Language Specification: Addition operator, MSDN.