转换增量值

时间:2014-06-12 09:02:43

标签: c#

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

i++.ToString()

上述声明工作正常。

++i.ToString()

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

8 个答案:

答案 0 :(得分:8)

因为在第二个表达式中,首先调用ToString() i方法,而++运算符对字符串无意义。另一方面,在第一个表达式中,整数i增加1,并调用方法ToString()。所以你得到你的号码的字符串表示。你可以转发它,正如ulugbek-umirov在他的评论中指出的那样:

(++i).ToString();

请查看here

答案 1 :(得分:2)

因为第二个意思是:

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

和字符串类型不能递增。

答案 2 :(得分:2)

这是由i++++i的不同运算符优先级引起的。

i++属于"小学"而++i属于"一元"组。但由于.也属于"小学"是有更高的优势。所以首先执行.ToString。您不能在字符串上使用++运算符。

你可以把它包裹在paranthesis中:

(++i).ToString()

参考:Operators

答案 3 :(得分:1)

(++i).ToString()可以解决问题。

答案 4 :(得分:1)

你必须选择

两次完成:

  i++;
  i.ToString();

使用括号设置优先级(首先增加然后转换为字符串)

(++i).ToString();

(i++).ToString();

答案 5 :(得分:1)

错误是由应用的运算符的优先级引起的。 在您的指令中,您尝试将int-increment应用于字符串。 如果你想发布增量,你应该这样做:

(++i).ToString();

答案 6 :(得分:1)

答案和评论说,这是因为任何“先执行”都会产生误导。此问题是由于.相对于++(前缀)的优先级更高。评估顺序与它无关 - 特别是因为++i.ToString() 无法编译因此根本没有评估(因此没有评估顺序)。

另见precedence vs associativity vs order

答案 7 :(得分:1)

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

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

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