如果我这样做
while((e = data.IndexOf('}', at)) >= 0
&&
(s = data.LastIndexOf('{', at, e-1)) >= 0)
在C#中,第二个表达式中e的值是否已经在while语句中赋值?
答案 0 :(得分:3)
你可以随时尝试。
简答:是的
答案很长:我宁愿创建更容易阅读的代码,因为这种编程不能优化任何东西。它可能是基于意见的,但我坚信这是一种最佳实践,并提供更好的代码维护。
while(e = data.IndexOf('}', at)) >= 0)
{
s = data.LastIndexOf('{', at, e-1))
if(s < 0)
break;
//do stuff
}
答案 1 :(得分:0)
根据规范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。
答案 2 :(得分:0)
是的,因为您使用了&&
运算符,它首先评估左侧以检查是否需要评估右侧。
条件AND运算符(
来自&& Operator (C# Reference) 的&&
)执行其bool操作数的逻辑AND,但仅在必要时评估其第二个操作数。