【问题标题】:Clarifying understanding of this conditional澄清对这个条件的理解
【发布时间】:2019-04-09 11:57:18
【问题描述】:

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

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

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

【问题讨论】:

  • 我真的很困惑你在困惑什么,这段代码的上下文以及这个人在说什么
  • 如果没有看到minimal reproducible example,就不可能在此处提供指导,因此我们可以看到例如validateNamesplayers 是什么。此外,来 SO 询问“这家伙是什么意思”似乎很奇怪。而不是直接问他。
  • 为什么不问“那个家伙”呢? SO 并不是用来解释别人的代码
  • 我们只能猜测,没有上下文,我们是在盲目猜测。如果 validatePalyers 返回 true,也许这是应该运行的代码?它可以用作该代码上方某处的单一/主要检查。老实说 validateNames 听起来像一个函数名,但这绝对不是一个函数调用。有问题的逻辑并不是您展示的示例代码唯一出错的地方。可怕的变量/属性命名也很可能。
  • idownvotedbecau.se/imageofcode 为什么发代码图片和文字图片而不是实际代码和文字?

标签: c# unity3d boolean conditional


【解决方案1】:

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

当你说:

我得出的结论是,如果玩家使用 bool 设置为 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' 为真,那么无论 'isOnline' 或 'players' 的值如何,它都会进行验证。

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

【讨论】:

  • “事实上,我相信运行时甚至不会费心评估 or 运算符的第二部分,因为它已经找到了一个真实的条件。”确实如此。 ||和 && 是“短路”。如果第一个条件给出了明确的结果,那么第二个甚至都不会被测试。 |和 & 没有这个限制,这有时是必要的。
  • 这是真的,这就是为什么我通常总是首先尝试拥有cheaper 条件。在这种情况下,我假设(isOnline && players > 1) 的执行成本低于validateNames(再次假设这可能需要数据库或比较所有玩家姓名?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多