运营商|| 不能应用于类型bool和字符串/字符串和字符串

我发现的简单任务非常困难。

Console.Write("[" + CurrentTime + "] Name a day of the week? "); string vDay = Console.ReadLine(); if (vDay != "Monday" || "Tuesday" || "Wednesday" || "Thursday" || "Friday") { Console.WriteLine("that is not a valid day of the week"); } 

我用的时候很开心!=它给了我一个错误,说“不能应用于bool和字符串”没有!=而且只是=我得到“字符串和字符串”

基本上我想要做的是,如果有人输入“你好”,例如它会说这不是一周中有效的一天。

这么简单的任务,但我发现它很难,谢谢你的帮助。

由于这里的所有答案都没有解释为什么你首先要面对这个问题,我将尝试这样做。

当我使用!=它给我一个错误说“不能应用于bool和字符串”

这是因为,在您的代码中:

 ...vDay != "Monday" || "Tuesday" ... 

vDay与成功计算的字符串“Monday”进行比较,然后将结果(布尔值)与字符串“Tuesday”进行比较。 这给你的问题是“ ……不能应用于bool和string ……

没有!=而只是=我得到“字符串和字符串

vDay被赋值为“Monday”(这可能导致字符串“Monday”)但是字符串“Monday”正在与字符串“Tuesday”进行比较。 这给你的问题是“ ……不能应用于字符串和字符串…… ”。

正确的方法是单独指定运算符:

 ...vDay != "Monday" && vDay != "Tuesday"... 

或者使用其他答案最佳描述的其他方式。

有一些类似的东西可能更干净:

 List list = new List { "Monday", "Tuesday", "Wednesday", "Thursday", ... }; if (!list.Contains(vDay )) { Console.WriteLine("that is not a valid day of the week"); } 

这就是你需要的:

 if (vDay != "Monday" && vDay != "Tuesday" && vDay != "Wednesday" && vDay != "Thursday" && vDay != "Friday") { Console.WriteLine("that is not a valid day of the week"); } 

这是使用基于集合的逻辑的另一种看法。

  var days = new HashSet { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" }; if (!days.Contains(vDay)) { Console.WriteLine("that is not a valid day of the week"); } 

编辑

我想解释错误:

Operator != on String只接受运算符RHS上的单个字符串,C#也不支持通过逻辑或||创建List 运算符(如果这是预期的,也不相反,!=运算符在|| ed字符串上的投影)。 但是,可以创建一个集合,并可以使用诸如Contains集合操作。 在这种情况下, Hashset通常是我的第一选择,因为它充当索引查​​找(尽管对于一组~5个字符串来说可能有点过分,但对于更大的集合,这将比ListArray更好地扩展)。

 if (vDay == "Monday" ||vDay == "Tuesday" ||vDay == "Wednesday" ||vDay == "Thursday" ||vDay == "Friday") { Console.WriteLine("is not a valid day of the week"); } 

这应该做到这一点。

 Text='<%# Eval("STS").ToString() == "N" ||Eval("STS").ToString() =="R" ? "
Approve?
" : "
Approved!
" %>'