-5

私はこのようなことをしたい -

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");
        }
    }

}

ここで、ユーザーが何も答えずに単に Enter キーを押した場合、変数入力は値nullを格納し、出力は でなければなりませんNo answer given

私のコードでは、trueとの入力は正常に機能しfalseています。

ただし、入力が指定されずにEnterキーが押された場合、コンパイラは例外をスローします

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

したがってnull、変数に格納された値を取得inputして、出力がNo answer given

ここ、

質問文字列は有効なブール値 C# として認識されませんでした

キーボードから直接null入力を取りたくないので、明らかに重複していません。また、そのような入力を取得できない場合、null 許容型のユーティリティは何ですか?回避策もありますか?

4

3 に答える 3

4
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
于 2017-12-28T10:11:31.090 に答える
2
bool? finalResult = null;
bool input = false;

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

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

上記の手法finalResultを使用すると、入力をまたはnullとして解析できない場合になります。truefalse

于 2017-12-28T10:16:43.007 に答える