将'.ToString()'与数字变量一起使用

时间:2011-06-03 22:37:59

标签: c# string numeric

在将数值转换为.ToString()时省略string是否有任何缺点?

int i = 1234;
string s;
// Instead of
s = "i is " + i.ToString();
// Writing
s = "i is " + i;

4 个答案:

答案 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#的默认值)。