【问题标题】:C# prompting for a boolean valueC# 提示输入布尔值
【发布时间】:2012-02-19 22:59:06
【问题描述】:

我的搜索是空白的,或者我只是不明白我正在寻找的结果。我试图提示用户输入一个布尔值,但我希望答案是是或否。如果您需要查看更多代码,请告诉我,但我有这个提示。

public static bool getBoolInputValue(string inputType)
    {
        bool valid = false;
        bool value = true;
        string inputString = string.Empty;
        do
        {
            inputString = GetInput(inputType);
            if (!(String.IsNullOrEmpty(inputString)))
            {
                valid = bool.TryParse(inputString, out value);
            }
            if (!valid)
                Console.WriteLine("Invalid " + inputType + " try again!");
        } while (!valid);

        return value;
    }

这是我的布尔值的参数。也许这需要更具体?

public bool Nitrus
    {
        set { nitrus = value; }
        get { return nitrus; }
    }

感谢您的帮助。我对编程相当陌生,但无法弄清楚这一点。它确实提示成功,但无论我在框中输入什么答案都没有关系,它告诉我它的格式不正确。

【问题讨论】:

  • 跳过IsNullOrEmpty 测试,bool.TryParse 足够聪明,如果你传入一个空字符串就会返回 false。
  • 我不明白为什么有人会否决这个问题(我已经投了赞成票)。我们都必须从某个地方开始,这包括发展我们自己的技能来寻找问题的答案,无论是在 MSDN 上还是在其他地方。

标签: c# boolean


【解决方案1】:

如果我理解正确,您希望用户输入“是”,这意味着您有一个 True 值。如果这是正确的,请跳过所有 string.IsNullOrEmpty 和 bool.TryParse 的内容,并执行类似这样的操作。

//make it ToLower so that it will still match if the user inputs "yEs"
inputString = GetInput(inputType);
if (inputString.ToLower() == "yes")
{
  value = true;
}
else
{
  value = false;
}

//note that the if/else code is the same as directly applying 
// the value from the comparison itself:
// value = inputString.ToLower() == "yes";

// this allows the user to type in "yes" or "y":
// value = inputString.ToLower() == "yes" || inputString.ToLower() == "y";

【讨论】:

  • Microsoft 的 .NET 字符串使用指南要求使用 ToUpper 而不是 ToLower,但如果这是所需的行为,最好指定一个不区分大小写的比较。
  • 谢谢,这行得通。然而,我的程序不断提示我这个问题,哈哈。由于某种原因,它显然不喜欢这个答案。下一个问题!
【解决方案2】:

Boolean.TryParse 只识别“真”和“假”。对于“是”和“否”或“开”和“关”,您需要编写自己的函数。

【讨论】:

    【解决方案3】:
    public static bool getBoolInputValue()
    {
        bool value;
        bool valid;
        do
        {
            Console.WriteLine("Enter yes or no: ");
            var inputString = Console.ReadLine();
            if (String.IsNullOrEmpty(inputString))
            {
                continue;
            }
            if ( string.Equals(inputString, "yes")
            {
               value = true;
               valid = true;
            }
            else if ( string.Equals(inputString, "no")
            {
               value = false;
               valid = true;
            }
    
        } while (!valid);
    
        return value;
    }
    

    【讨论】:

    • 很确定这不会编译,因为valid 未初始化。即,如果输入字符串是“jimmy crack corn”开始。
    【解决方案4】:

    您的程序将只接受“真”或“假”作为有效的布尔值。如果要“是”或“否”,则需要进行字符串比较。

    valid = string.Compare(inputString, "yes", true) == 0 || string.Compare(inputString, "no", true) == 0;
    
    ...
    value = string.Compare(inputString, "yes", true) == 0;
    

    【讨论】:

    • ? true : false 总是多余的。
    • 别担心,我也很累,只是熬夜玩了 16 小时的轴心国与同盟国游戏 :)
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多