我注意到在C#中,+运算符左边是一个字符串,右边是一个对象:
string output = "" + numbers.ElementAt(0);
//vs
string output = numbers.ElementAt(0).ToString();
为什么默认行为是接受右边的对象而不是字符串?当我在其他的+运算符中看到int时,它是强类型的int / int而不是int / object。
我知道在C#中所有对象都有ToString()方法,这只是一种方法来消除上面第一个例子中调用.ToString()的需要吗?
答案 0 :(得分:3)
为什么默认行为是接受右边的对象而不是字符串?
好吧,首先,是一个接受两个字符串的重载,如果你传递两个将要使用的重载字符串,那么这是默认行为。但是如果你传递一个字符串和一个非字符串,那么将使用(字符串,对象)重载。
至于为什么会出现重载,这是因为C#语言设计者认为将字符串连接到任何对象是完全合理的,并且对于任何类型的对象都有合理的实现
当我看其他+运算符为int时,它是强类型的int / int而不是int / object。
您如何实现if(myBool == true)
重载?我没有看到任何好的实现,不像字符串连接。
我知道在C#中所有对象都有ToString()方法,这只是一种方法来消除上面第一个例子中调用.ToString()的需要吗?
如果对象为null,则实际上有效,而您的解决方案则不然。如果你考虑到那个,那么是,这基本上就是重载所做的一切。
答案 1 :(得分:0)
这只是一种消除上面第一个例子中调用.ToString()的需要的方法
是
答案 2 :(得分:0)
字符串连接会自动将非字符串转换为字符串。