澄清对这个条件的理解

Clarifying understanding of this conditional

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

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

如果有人需要有关代码的更多信息来帮助回答我的问题,请参考编写本教程的人对代码的评价。

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

当你说:

I came to the conclusion that the bool would seem useless if players was set to 0

你指的是哪个布尔值?

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

您可以使用像 LinqPad (which I find invaluable) or an online IDE like dotnetfiddle 这样的工具。

像这样的东西会告诉你这里发生了什么,这应该有助于澄清问题:

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' 为真,那么无论 'isOnline' 或 'players' 的值如何,它都会进行验证。

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