我尝试将增量值转换为字符串。
i++.ToString()
上述声明工作正常。
++i.ToString()
这一个显示错误行。为什么呢?
答案 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()
无法编译因此根本没有评估(因此没有评估顺序)。
答案 7 :(得分:1)
因为当++用作后缀时,它会立即增加其值,然后使用ToString()将其转换为字符串;
相反,如果您使用++作为前缀运算符,那么它将使用ToString()将现有值转换为字符串然后它将尝试递增该值,因此在这种情况下,您将获得增加字符串值的错误...
所以尝试使用括号将其优先级提高为(++ i).ToString();