代码之家  ›  专栏  ›  技术社区  ›  workoverflow

Lazy“and”表达式求值[重复]

  •  1
  • workoverflow  · 技术社区  · 8 年前

    我一直在使用以下代码块请求用户输入,并在控制台应用程序中检查其有效性。

    do
    {
        Console.Write("Enter X value:");    // prompt
    } while (!(int.TryParse(Console.ReadLine(),out temp) && (temp<=10) && (temp>=0))); // repeat if input couldn't be parsed as an integer or out of range
    

    是否有文档记录的功能(and)表达式求值是懒惰的?ie:如果第一个操作数为false,那么它不会解析第二个操作数?我可以在生产构建中依赖它吗?我能指望它在其他编译器中也会有同样的行为吗?
    这是我在PPCG中学到的东西。东南方

    此外,能否使块更易于阅读或简化为一行程序?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Ousmane D.    8 年前

    是否有文档记录的功能(和)表达式求值 懒惰吗?

    Yes as mentioned on the C# reference page:

    条件AND运算符(&)对其布尔操作数执行逻辑AND, 但仅在必要时计算其第二个操作数 . 换句话说, 这是一个短路操作员 .

    我可以在生产构建中依赖它吗?我能预料到吗 在其他编译器中的行为是否相同?

    是的,它应该始终表现相同。

    此外,能否使块更易于读取或简化为 一艘客轮?

    除了删除一些冗余参数外,您不能仅使用一行来简化此操作。

    但是,您可以通过隐藏 (temp<=10) && (temp>=0) 使用某种方法,例如:

    public static bool IsValidRange(int temp) =>  temp >= 0 && temp <= 10;
    

    然后您的while状态变为:

    while (!(int.TryParse(Console.ReadLine(), out temp) && IsValidRange(temp)));
    

    现在,方法的名称读作问题语句 IsValidRange .

        2
  •  0
  •   Sweeper    8 年前

    下面是C#语言规范中的相关章节 && || :

    第7.12节条件逻辑运算符

    &&和| |运算符是&的条件版本;以及| 操作员:

    • 操作x&&y对应于操作x&y 但只有当x不为false时,才计算y。
    • 运算x | | y与运算x | y相对应,但仅计算y 如果x不是真的。

    因为它在规范中,所以无论使用哪种编译器,它的行为都应该相同。如果不是,则您使用的编译器不被视为“C#”编译器。:)