澄清对此条件的理解

时间:2018-11-06 05:04:50

标签: c# unity3d boolean conditional

我目前正在通过一系列教程学习C#,并且想知道我对此条件的理解是否有意义。

enter image description here

这个代码让我感到困惑的是,该教程说如果1为0,那么validateNames bool在逻辑上似乎是无用的。我最终发现validateNames指示代码在某个时候不仅应验证一个名称,还应验证多个名称。我得出的结论是,如果将玩家设置为0,则布尔值似乎毫无用处,因为当第二个条件仅在1或2时将运行代码时,您不需要布尔值来表示代码将在多个名称上运行。更多的玩家。我的结论有意义吗?我对此并不完全自信。

enter image description here

如果有人需要更多有关该信息的信息以帮助回答我的问题,那么撰写本教程的人就是这样说的。

1 个答案:

答案 0 :(得分:2)

我不能说您的理解是否正确,因为从您的问题中不清楚您对代码的理解是什么。

当你说:

  

我得出的结论是,如果球员犯错,布尔将显得毫无用处   设置为0

您是指哪个布尔?

无论如何,在学习的过程中,我建议养成创建小程序来测试这种逻辑的习惯。

您可以使用LinqPad之类的工具(我认为它非常宝贵)或dotnetfiddle之类的在线IDE。

类似这样的东西将向您显示这里发生的事情,这应该有助于清理问题:

using System;

public class Program
{
    public static void Main()
    {       
        Console.Write("Test 1:");
        TestBoolLogic(true, true, 0);
        Console.Write("Test 2:");
        TestBoolLogic(true, true, 1);
        Console.Write("Test 3:");
        TestBoolLogic(true, true, 2);
        Console.Write("Test 4:");
        TestBoolLogic(false, true, 0);
        Console.Write("Test 5:");
        TestBoolLogic(false, true, 1);
        Console.Write("Test 6:");
        TestBoolLogic(false, true, 2);
    }

    public static void TestBoolLogic(bool validateNames, bool isOnline, int players){
        if(validateNames || (isOnline && players > 1)){
            Console.WriteLine("Validating names");
        }else{
            Console.WriteLine("No validation");
        }
    }
}

哪个产生输出:

Test 1:Validating names
Test 2:Validating names
Test 3:Validating names
Test 4:No validation
Test 5:No validation
Test 6:Validating names

因此您可以看到,如果'validateNames'为true,则无论'isOnline'或'players'的值如何,它都会进行验证。

事实上,我相信运行时甚至不会费心评估or运算符的第二部分,因为它已经找到了true条件。