繁体   English   中英

字符串“Sunday”未被识别为有效 Boolean

[英]String "Sunday" was not recognized as a valid Boolean

在编程方面,我是一个初学者,所以对于这里的大多数人来说,我的问题似乎很容易。 我正在尝试制作一个简单的程序,您可以在其中写下一周中的某一天,它应该根据答案显示信息。 我选择星期天作为正确答案。 我用 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();

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

因此,当从“Sunday”转换为用户输入时,代码会尝试转换为 true 或 false 并抛出异常。

你应该这样写你的程序:

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并使用忽略大小写标志解析用户输入。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM