使用';.ToString()';具有数字变量
本文关键字:数字 变量 ToString 使用 | 更新日期: 2023-09-27 17:58:26
在将数值转换为string
时省略.ToString()
有什么缺点吗?
int i = 1234;
string s;
// Instead of
s = "i is " + i.ToString();
// Writing
s = "i is " + i;
在这种情况下没有什么区别。
"Count: " + i
编译为
String.Concat("Count: ",i)
Concat有多个重载,我认为选择了Concat(Object, Object)
重载(因为String和int的唯一共同祖先是object)。
内部实现是这样的:
return (arg0.ToString() + arg1.ToString());
如果你打电话给
"Count: " + i.ToString()
则它选择CCD_ 4过载,因为两者都是字符串。
因此,对于所有实际问题,它本质上都是这样做的——它隐式地调用i.ToString().
在类似上面的情况下,我通常会省略.ToString,因为它只会添加噪声。
尽管它不会编译(至少在不在第一个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"
我能想到的唯一缺点是可以向ToString()
添加额外的参数。
但在大多数情况下,您可以将字符串与int连接起来,我认为更好的解决方案是使用string.Format()
:
string.Format("i is {0}", i);
在您的情况下,这种方式是否更好并不明显,但当您开始考虑添加适当的标点符号(i is {0}.
)、以其他方式稍微更改输出或支持本地化时,这种方式的优势就显而易见了。
当Option Strict(C#的默认值)处于启用状态时,赋值s = i
将不会编译。