.Range返回true,应该是false

时间:2015-09-23 08:46:21

标签: c# linq

我有以下内容:

   if (settingsAgeFrom > 0 && settingsAgeTo > 0)
   {
      if (!Enumerable.Range(settingsAgeFrom, settingsAgeTo).Contains(age))
      {
         canContact = false;
      } 
   }

这基本上会检查年龄是否在settingsAgeFrom和settingsAgeTo

之间
settingsAgeFrom = 18
settingsAgeTo = 20
age = 26

应该返回false并将canContact设置为false,而是跳过它说明它有效吗?

我在这里错过了什么吗?

所有三个变量都是int类型。

3 个答案:

答案 0 :(得分:7)

你弄错了,Enumerable.Range第二个参数为count,它应该是: -

if (!Enumerable.Range(settingsAgeFrom, (settingsAgeTo - settingsAgeFrom) + 1)
               .Contains(age))

因此,您的范围将是18 - 20而不是18 - 37(您当前的代码正在生成)。

答案 1 :(得分:0)

Enumerable.Range(...)不是(from,to),但是(from,count),试试这个:

if (settingsAgeFrom > 0 && settingsAgeTo > 0)
   {
      if (!Enumerable.Range(settingsAgeFrom, settingsAgeTo-settingsAgeFrom).Contains(age))
      {
         canContact = false;
      } 
   }

答案 2 :(得分:0)

if (settingsAgeFrom > 0 && settingsAgeTo > 0)
   {
      canContact = (settingsAgeFrom >= age && age <= settingsAgeTo);
   }