在while语句中使用返回值赋值

时间:2014-02-02 02:14:52

标签: c# while-loop assign

如果我这样做

while((e = data.IndexOf('}', at)) >= 0
      &&
      (s = data.LastIndexOf('{', at, e-1)) >= 0)

在C#中,第二个表达式中e的值是否已经在while语句中赋值?

3 个答案:

答案 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运算符(&&)执行其bool操作数的逻辑AND,但仅在必要时评估其第二个操作数

     来自&& Operator (C# Reference)