【发布时间】:2014-02-02 02:14:51
【问题描述】:
如果我这样做
while((e = data.IndexOf('}', at)) >= 0
&&
(s = data.LastIndexOf('{', at, e-1)) >= 0)
在 C# 中,第二个表达式中 e 的值是否已经具有在 while 语句中分配的值?
【问题讨论】:
标签: c# while-loop assign
如果我这样做
while((e = data.IndexOf('}', at)) >= 0
&&
(s = data.LastIndexOf('{', at, e-1)) >= 0)
在 C# 中,第二个表达式中 e 的值是否已经具有在 while 语句中分配的值?
【问题讨论】:
标签: c# while-loop assign
您可以随时尝试。
简短回答:是的
长答案:我宁愿创建更易于阅读的代码,因为这种编程不会优化任何东西。它可能是基于意见的,但我坚信这是一种最佳实践,并提供更好的代码维护。
while(e = data.IndexOf('}', at)) >= 0)
{
s = data.LastIndexOf('{', at, e-1))
if(s < 0)
break;
//do stuff
}
【讨论】:
根据规范http://msdn.microsoft.com/en-us/library/Aa691322,评估是从左到右:
例如,在 F(i) + G(i++) * H(i) 中,方法 F 使用旧的 i 的值,然后使用 i 的旧值调用方法 G,并且, 最后,使用新的 i 值调用方法 H。
所以是的,e 将分配给data.IndexOf('}', at) 的结果,然后data.LastIndexOf('{', at, e-1) 将使用那个“新”e。
【讨论】:
是的,因为您使用了&& 运算符,它首先评估左侧以检查是否需要评估右侧。
条件与运算符 (
&&) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数。
【讨论】: