c# - while语句中的三元表达式在每个循环中都被评估

标签 c#

我有一个简单的循环来计算两个数字的 hcf 以抵消分数。

我想知道 while 条件中的三元表达式是否在每个循环中都重新计算,因此应该在之前计算一次并存储为性能目的的变量?

 public Fraction LowestForm()
        {
            int hcf = 1;
            int counter =2;
            while (counter <= (Numerator < Denominator ? Numerator : Denominator))
            {
                if (Numerator % counter == 0 && Denominator % counter == 0)
                {
                    hcf = counter;
                }  
                counter++;
            }
            return new Fraction(Numerator / hcf, Denominator / hcf);
        }

澄清一下:我主要关心 Rosylyn 编译器

最佳答案

实际上这取决于。如果任何表达式(或任何子表达式,子表达式的特定类型不重要并且子表达式的位置,即在循环条件中或循环体内也不重要)不依赖于在中修改的变量循环,可以移出循环并只计算一次,优化器将执行此操作。 C# 有非常好的优化器。

在调试版本中,不会优化任何内容。每个表达式都将被重新计算。

作为首要任务,我会建议提高代码的清晰度和可读性。除此之外,尽量减少开发工作代码的时间。您只需要在关键代码段或当您发现优化器由于某种原因没有做好工作时,才需要帮助优化器。很少,但有时会发生。

关于c# - while语句中的三元表达式在每个循环中都被评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41472987/

相关文章:

c# - 现有 Canvas 中的 ItemsControl

c# - 当请求离开 asp :multiview or ajax 时,在 Response.End() 之后没有写入响应

c# - 如何从 C# 使用 Magento REST API

c# - 在 Razor ASP.NET MVC 中调用方法

c# - .NET Core 但不是 .NET Framework 的 400 BadRequest 响应

c# - Visual Studio 代码生成 - 使用大写类型名称

c# - 命名空间中不存在类型或命名空间名称

javascript - DateTime.Now 如何工作?

c# - 通过操作轻松假装 - 说它找不到电话但显示在列表中

javascript - AngularJs 将带有子集合的对象发布到 MVC WebAPI