我目前正在通过一系列教程学习C#,并且想知道我对此条件的理解是否有意义。
这个代码让我感到困惑的是,该教程说如果1为0,那么validateNames bool在逻辑上似乎是无用的。我最终发现validateNames指示代码在某个时候不仅应验证一个名称,还应验证多个名称。我得出的结论是,如果将玩家设置为0,则布尔值似乎毫无用处,因为当第二个条件仅在1或2时将运行代码时,您不需要布尔值来表示代码将在多个名称上运行。更多的玩家。我的结论有意义吗?我对此并不完全自信。
如果有人需要更多有关该信息的信息以帮助回答我的问题,那么撰写本教程的人就是这样说的。
答案 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
条件。