使用';.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;

使用';.ToString()';具有数字变量

在这种情况下没有什么区别。

"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将不会编译。