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

时间:2014-05-08 10:47:45

标签: c# string if-statement

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

 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和string"没有!=而只是=我得到"字符串和字符串"

基本上我要做的就是如果有人打字"你好"例如,它会说这不是一周中的有效日期。

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

6 个答案:

答案 0 :(得分:7)

可能更清洁,有类似的东西:

List<string> list = new List<string> { "Monday", "Tuesday", "Wednesday", "Thursday", ... };

if (!list.Contains(vDay ))
{
    Console.WriteLine("that is not a valid day of the week");
}

答案 1 :(得分:6)

这就是你需要的:

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

答案 2 :(得分:4)

这是使用基于集合的逻辑的另一种观点。

 var days = new HashSet<string> { "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或{{1对于更大的集合)。

答案 3 :(得分:4)

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

  

当我使用时!=它给我一个错误,说“不能适用于布尔   和字符串“

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

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

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

  

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

vDay被赋予“星期一”的值(这可能导致字符串“星期一”)但是字符串“星期一”正在与字符串“星期二”进行比较。这给你的问题是“ ...不能应用于字符串和字符串.. ”。

正确的方法是分别指定运算符:

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

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

答案 4 :(得分:0)

var jsonObj = {
  "name": "Rohit",
  "age": 27,
  "city": "Gurgaon"
};

// if you don't need specific keys you should delete this and ~keys.indexOf(prop) in condition
var keys = ['name', 'city', 'moscow'];

function newObj(obj, count) {
  var newObj = {};
  var counter = count;

  for (var prop in obj) {
    if (jsonObj.hasOwnProperty(prop) && ~keys.indexOf(prop)) {
      newObj[prop] = obj[prop];
      counter -= 1;
    }

    if(counter === 0) break;
  }

  return newObj;
}

console.log(JSON.stringify(newObj(jsonObj, 20)));

这应该这样做。

答案 5 :(得分:-1)

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