【问题标题】:In C#, how to take null input from keyboard into nullable type boolean variable?在 C# 中,如何将键盘的空输入转换为可空类型布尔变量?
【发布时间】:2018-06-08 21:00:37
【问题描述】:

我想做这样的事情-

using System;

class MainClass
{
    public static void Main ()
    {
        bool? input;
        Console.WriteLine ("Are you Major?");
        input = bool.Parse (Console.ReadLine ());
        IsMajor (input); 

    }


    public static void IsMajor (bool? Answer)
    {
        if (Answer == true) {
            Console.WriteLine ("You are a major");
        } else if (Answer == false) {
            Console.WriteLine ("You are not a major");
        } else {
            Console.WriteLine ("No answer given");
        }
    }

}

这里如果用户没有回答,只是按回车,变量输入必须存储值null,输出必须是No answer given

在我的代码中,truefalse 的输入工作正常。

但是如果没有输入并且按下回车,编译器会抛出异常

System.FormatExeption has been thrown
String was not recognized as a valid Boolean

那么如何获取存储在变量input 中的null 值,以便输出为No answer given

这里,

问题String was not recognized as a valid boolean C#

显然不是重复的,因为它不想直接从键盘获取空输入。如果不能接受这样的输入,那么可空类型有什么用处,因为也有解决方法?

【问题讨论】:

  • 将控制台输入读入字符串,然后使用 bool.TryParse.
  • 但这是一种解决方法。在可空数据类型的情况下,是否可以直接输入空值?
  • 不,显然不是,否则你的代码已经可以工作了。这正是 TryParse 存在的原因。
  • @mjwills 不,它不是重复的,我想从键盘直接输入空值

标签: c# exception boolean nullable keyboard-input


【解决方案1】:
bool input;
Console.WriteLine("Are you Major?");
if (!bool.TryParse(Console.ReadLine(), out input))
{
    Console.WriteLine("No answer given");
}
else
{
    //....
}

或使用 C# 7

if (!bool.TryParse(Console.ReadLine(), out bool input))
{
    Console.WriteLine("No answer given");
}
else
{
    // Use "input" variable
}
// You can use "input" variable here too

【讨论】:

  • 很好的答案,但我不想这样做。那么可空数据类型的用途是什么?当不使用可空数据类型时,也会有解决方法。
  • @Suraj 例如,在实体框架中。当数据库中的bit 列允许nulls(IsAttached 位为空)时,则必须使用bool?
【解决方案2】:
bool? finalResult = null;
bool input = false;

Console.WriteLine("Are you Major?");

if (bool.TryParse(Console.ReadLine(), out input))
    finalResult = input;
}

如果输入无法解析为truefalse,则使用上述技术finalResult 将是null

【讨论】:

    【解决方案3】:

    您可以用 try-catch 包围您的解析,并在 catch 时(因此,如果用户给出的不是 true 或 false )将输入设置为 null。

    【讨论】:

    • 这是一种解决方法。在可空数据类型的情况下,是否可以直接采用空输入?
    • 不,这是不可能的。如果您不输入任何内容,Console.ReadLine() 将返回空字符串,因此您必须自己处理它(即使用 String.IsNullOrEmpty())
    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2011-07-16
    • 2012-04-21
    • 2022-01-22
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多