2015-09-23 3 views
0

я следующее:.Range возвращает истину, когда оно должно быть ложным

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

Это в основном проверяет, чтобы увидеть, если возраст между settingsAgeFrom и settingsAgeTo

settingsAgeFrom = 18 
settingsAgeTo = 20 
age = 26 

должна возвращать ложь и установить canContact в false, но вместо этого он проскакивает над этим, заявляя, что он действителен?

Я что-то упустил?

Все три переменные имеют тип int.

+0

вы имеете в виду canContact всегда ложно? у вас есть canContact инициализируется на true? – tofutim

+0

@tofutim yes, canContact по умолчанию установлено значение true, но мой возраст не находится в пределах диапазона, поэтому он должен установить canContact на false –

+1

Я бы не использовал 'Enumerable.Range()'. Просто 'canContact = age> = settingsAgeFrom && age <= settingsAgeTo' – Eric

ответ

7

Вы получаете это неправильно, Enumerable.Range имеет второй параметр как count, он должен быть: -

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

Так этим, ваш диапазон будет 18 - 20 вместо 18 - 37 (что ваш текущий код производит).

+1

https://msdn.microsoft.com/en-us/library/system.linq.enumerable.range%28v=vs.100%29.aspx?f=255&MSPPError=-2147217396 – tofutim

0

Enumerable.Range (...) не является (от, до), но (с, количество), попробуйте следующее:

if (settingsAgeFrom > 0 && settingsAgeTo > 0) 
    { 
     if (!Enumerable.Range(settingsAgeFrom, settingsAgeTo-settingsAgeFrom).Contains(age)) 
     { 
     canContact = false; 
     } 
    } 
0
if (settingsAgeFrom > 0 && settingsAgeTo > 0) 
    { 
     canContact = (settingsAgeFrom >= age && age <= settingsAgeTo); 
    } 
Смежные вопросы