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# 中,+ 运算符在左侧接受一个字符串,在右侧接受一个对象:
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 转换为字符串。