【问题标题】:String "Sunday" was not recognized as a valid Boolean字符串“Sunday”未被识别为有效的布尔值
【发布时间】:2022-01-25 21:15:03
【问题描述】:

在编程方面我是个初学者,所以对于这里的大多数人来说,我的问题可能看起来很容易。我正在尝试制作一个简单的程序,您可以在其中写下一周中的某一天,它应该根据答案显示信息。我选择星期天作为正确答案。我用 bool 和 string 进行了尝试,但我遇到了一个问题,它没有转换答案,所以我真的不知道下一步该做什么。 这是代码。

        Boolean day;
        Boolean Sunday = true;
        Boolean Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = false;

    

        Console.Write("What's the day of the week today? Write your answer here: ");
        day = Boolean.Parse(Console.ReadLine());

        if (Sunday == true)
        {
            Console.WriteLine("Your answer is correct!");
        }
        else
        {
            Console.WriteLine("Your answer is incorret. Please try again.");
        }


        Console.ReadKey();

【问题讨论】:

  • C# 无法将输入的字符串链接到某个变量的名称

标签: c# boolean


【解决方案1】:

您期望的用户输入是 string 的星期几,但您的数据类型是 Boolean,即 truefalse

因此,例如,当从“星期日”转换为用户输入时,代码会尝试转换为真或假并抛出异常。

你应该这样写你的程序:

private static void Main(string[] args)
{
    var currentDayOfWeek = DayOfWeek.Sunday;
    // currentDayOfWeek = DateTime.Today.DayOfWeek; // or if you want dynamically set todays day of week
    string userInputDayOfWeek;

    Console.Write("What's the day of the week today? Write your answer here: ");
    userInputDayOfWeek = Console.ReadLine();

    if ((Enum.TryParse(typeof(DayOfWeek), userInputDayOfWeek, ignoreCase: true, out object userInputParsed))
        && (DayOfWeek)userInputParsed == currentDayOfWeek)
    {
        Console.WriteLine("Your answer is correct!");
    }
    else
    {
        Console.WriteLine("Your answer is incorrect. Please try again.");
    }

    Console.ReadKey();
}

这里我们使用System命名空间中的枚举DayOfWeek,并使用忽略大小写标志解析用户输入。

【讨论】:

    【解决方案2】:

    据我了解,反射超出了您学校项目的范围,因此您可以创建一个字符串数组

        
        string trueDay = "Sunday";
        // or maybe better
          string trueDay=DateTime.Today.DayOfWeek.ToString();
        
        string[] falseDays = new string[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    
    
        Console.Write("What's the day of the week today? Write your answer here: ");
        var day = Console.ReadLine();
    
        if (day.ToLower() == trueDay.ToLower())
        {
            Console.WriteLine("Your answer is correct!");
        }
        else if ( falseDays.Any( d =>d.ToLower()==day.ToLower() ))
        {
                    
            Console.WriteLine("Your answer is incorret. Please try again.");
            
        } else
            Console.WriteLine("Please type a correct day name!");
    
    
        Console.ReadKey();
    

    如果 Linq 也不允许,试试这个

        var found=false;
        foreach (var item in falseDays)
        {
            if (item.ToLower() == day.ToLower())
            {  
                found=true;
                Console.WriteLine("Your answer is incorret. Please try again.");
                break;
            }
        }
         if(!found) Console.WriteLine("Please type a correct day name!");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-13
      • 2017-02-21
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 2017-03-13
      相关资源
      最近更新 更多