【问题标题】:use return value assignment within while statement在 while 语句中使用返回值赋值
【发布时间】: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


    【解决方案1】:

    您可以随时尝试。

    简短回答:是的

    长答案:我宁愿创建更易于阅读的代码,因为这种编程不会优化任何东西。它可能是基于意见的,但我坚信这是一种最佳实践,并提供更好的代码维护。

    while(e = data.IndexOf('}', at)) >= 0)
    {
      s = data.LastIndexOf('{', at, e-1))
      if(s < 0)
        break;
      //do stuff
    }
    

    【讨论】:

    • 您的示例当然是指更少/更容易的代码维护,而不是更高:)
    【解决方案2】:

    根据规范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。

    【讨论】:

      【解决方案3】:

      是的,因为您使用了&amp;&amp; 运算符,它首先评估左侧以检查是否需要评估右侧。

      条件与运算符 (&amp;&amp;) 对其布尔操作数执行逻辑与,但仅在必要时评估其第二个操作数

      来自&& Operator (C# Reference)

      【讨论】:

        猜你喜欢
        • 2018-12-06
        • 2011-10-24
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 2016-01-30
        • 2020-03-01
        • 2014-03-12
        相关资源
        最近更新 更多