2014-06-12 51 views
3

我试图将递增值转换为字符串。转换增量值

i++.ToString() 

上述声明工作正常。

++i.ToString() 

这一个显示错误行。为什么?

+3

虽然这对于重现的人来说是微不足道的,但我鼓励您在未来的问题中包含您遇到的确切错误细节。简单地说,“这个显示错误”使事情不清楚。 –

+0

它显示红色的错误行... – Jesuraja

+1

在这里你可以看到,对于'i ++'和'++ i',运算符优先级是不同的:http://msdn.microsoft.com/en-us/library/6a71f45d .aspx第二个属于“一元”组,但'.'属于“主”。所以'.ToString'首先被执行。 –

回答

8

因为在第二个表达式中,首先调用iToString()方法,并且++运算符对字符串没有意义。另一方面,在您的第一个表达式中,整数i将增加1,并调用方法ToString()。所以你得到你的号码的字符串表示。你可以CONVER吧,因为已经乌卢格别克-umirov在他的评论中指出:

(++i).ToString(); 

请看看here

+0

然后如何转换它? – Jesuraja

+3

@Jesuraja使用'(++ i).ToString()'。 –

+4

你的意思是_meaningless_? –

2

由于第二装置:

++(i.ToString()) // Oops, compiler error 

和字符串类型不能被递增。

+0

删除额外的')' – Jesuraja

+0

@Jesuraja删除。谢谢,这是错字。 –

1

(++i).ToString()将做的伎俩。

1

你必须选择

使其在2次:

i++; 
    i.ToString(); 

使用圆括号设置优先级(第一次增加,然后转换为字符串)

(++i).ToString(); 

(i++).ToString(); 
1

错误是由应用操作符的优先级引起的。 在你的指令中,你试图对一个字符串应用一个int增量。 如果您想发表增量你应该做的:

(++i).ToString(); 
2

它是由i++++i不同的运营商precendence引起的。

i++属于“Primary”,而++i属于“Unary”组。但由于.也属于“小学”具有较高的优先权。所以.ToString首先执行。您不能在字符串上使用++运算符。

你可以用它在paranthesis:

(++i).ToString() 

参考:Operators

1

答案和评论说,这是由于什么“执行第一”是误导。此问题是由于的优先级.相对于++(前缀)。评估顺序与它无关 - 尤其是因为++i.ToString()不能编译,因此根本没有评估(因此没有评估顺序)。请参阅precedence vs associativity vs order

1

因为当++被用作后缀时,它会立即增加它的值,然后使用ToString()将它转换为字符串。

相反,如果您使用++作为前缀运算符,那么它会使用ToString()将现有值转换为字符串,然后它会尝试增加该值,因此在这种情况下,您会在增加字符串值时出现错误。

所以尝试使用圆括号将其优先级提高为(++ i).ToString();

+1

感谢您的第一个回答:) – Jesuraja