如何将字符串中的 Y 解析为真布尔值

Asb*_*edt -1 c# parsing boolean

为什么这个 C# 代码不起作用?我想不明白。

我正在努力寻找一个简单的 C# 代码示例,该示例可以将 console.readline() 中的字符串值“y”和“n”转换/解析为布尔 true 或 false 语句,并将其保存为布尔数据类型。

using System;

public class Demo
{
    public static void Main()
    {
        Console.WriteLine("Input y");
        string answer = Console.ReadLine();
        if (answer == "y")
        {
            bool InputY = bool.Parse(answer);
            Console.WriteLine("You have saved a 'True' statement in the boolean with name of 'InputY'");
        }
        else
        {
            Console.WriteLine("Any random text");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

bol*_*lov 7

Boolean.Parse(选择性引号):

退货

Boolean

如果值等于 则为 true TrueString;如果 value 等于 则为 false FalseString

例外情况

FormatException

value不等于TrueStringFalseString

Boolean.TrueString 字段

评论

该字段等于字符串"True"

Boolean.FalseString 字段

评论

该字段等于字符串"False"

正如您所看到的,Parse仅接受字符串"True""False",这不是您所需要的。

但是......您已经位于处理真实输入的分支上if (answer == "y"),因此您不需要进行任何其他类型的解析。

你可以这样做:

if (anwser.ToLower() == "y")
{
    // deal with answer yes
}
else if (answer.ToLower() == "n")
{
   // deal with answer no
}
else
{
   // deal with answer outside of y/n
}
Run Code Online (Sandbox Code Playgroud)

如果您想要一个布尔值来代表他们的答案,那么您可以类似地创建一个函数:

bool ParseYNString(string stringToParse)
{
    if (stringToParse.ToLower() == "y")
       return true;

    if (stringToParse.ToLower() == "n")
       return false;

    throw new FormatException(/* message */);
}
Run Code Online (Sandbox Code Playgroud)

您可以更进一步,创建一个函数来获取 Y/N 输入:

bool GetYNFromConsole(string prompMessage, string tryAgainMessage)
{
    Console.Write(prompMessage);

    while (true)
    {
       string line = Console.ReadLine();

       if (line.ToLower() == "y")
           return true;

       if (line.ToLower() == "n")
           return false;

       Console.Write(tryAgainMessage);
    }
}
Run Code Online (Sandbox Code Playgroud)

这当然只是一个起点。您应该根据您的需要定制它。