在将数值转换为.ToString()
时省略string
是否有任何缺点?
int i = 1234;
string s;
// Instead of
s = "i is " + i.ToString();
// Writing
s = "i is " + i;
答案 0 :(得分:4)
在这种情况下没有区别。
"Count: " + i
编译为
String.Concat("Count: ",i)
String.Concat有多个重载,我相信选择Concat(Object, Object)
重载(因为string和int的唯一共同祖先是对象)。
内部实施是:
return (arg0.ToString() + arg1.ToString());
如果你打电话
"Count: " + i.ToString()
然后它选择Concat(String, String)
重载,因为两者都是字符串。
因此,对于所有实际问题,无论如何它基本上都是这样做的 - 它隐含地调用了i.ToString()。
在上述情况下,我通常会省略.ToString,因为它只会增加噪音。
答案 1 :(得分:1)
尽管事实上它不会编译(至少它不会在第一个""
之前没有添加另一个i
而使用Visual Studio 2008)但是存在差异,这取决于你如何使用它(假设它会起作用)以及处理运算符的顺序(在C#中,我猜几乎所有语言+
的优先级都高于=
):
int i = 1234;
string s;
s = i.ToString(); // "1234"
s = i.ToString() + i.ToString(); // "12341234"
s = i; // "1234"
s = i + i; // "2468" (but only if you don't add "" in front)
编辑: 使用更新的代码没有真正的区别,假设您不使用括号来分组几个非字符串对象/变量:
int i = 1234;
string s;
s = "" + i + i; // "12341234"
s = "" + (i + i); // "2468"
答案 2 :(得分:1)
我能想到的唯一缺点是您可以将其他参数添加到ToString()
。
但是在大多数可以将字符串与int连接的情况下,我认为更好的解决方案是使用string.Format()
:
string.Format("i is {0}", i);
在你的情况下,这种方式不是很明显,但你开始考虑添加适当的标点符号(i is {0}.
),以其他方式稍微改变输出,或者支持本地化,这样做的好处方式变得清晰。
答案 3 :(得分:0)
当Option Strict打开时,分配s = i
将无法编译(C#的默认值)。