运营商|| 不能应用于类型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个字符串来说可能有点过分,但对于更大的集合,这将比List
或Array
更好地扩展)。
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!
" %>'