[英]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
,它是true
或false
。
因此,当从“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.