2014-01-20 3 views
0

ОК, Итак, вот моя проверка, независимо от того, как я ее пробовал, она не проходит должным образом, она продолжает останавливаться.Проблема с If Check in C#

DateTime now = new DateTime(); 
string s = "Everyday"; 
string currentTime = now.ToString("HH:mm"); 
string remDate = "21:00"; //set to a minute or two i the future 
string CurrentDay = "Sunday"; 

if ((s.ToUpper() == "WORKDAYS") ||(s.ToUpper() == "EVERYDAY" || s.ToUpper() == CurrentDay.ToUpper()) 
&& ((currentTime == remDate) && (s.ToUpper() != "SUNDAY") && (s.ToUpper() != "SATURDAY"))) 
{ 
    MessageBox.Show("Success!!!!"); 
} 

Поэтому, когда он попадает в чек, он останавливается, никогда не попадает в поле сообщения. Независимо от того, в каком порядке я пробовал проверки, он не работает, смотрел на это какое-то время, думал, что кто-то там может либо показать мне лучший способ, либо посмотреть, что мне не хватает.

+1

Это может помочь указать на английском языке, что должен делать ваш тест. –

+0

как мог '(currentTime == remDate)' когда-либо проходить, если вам не повезло, если угадать, в какое время это произойдет, когда вы запустите код и поставите это время как «remDate» раньше времени? – Claies

+0

Кажется, действительно сложный условный. Я не знаю, намереваетесь ли вы 'и' предложение, которое проверяет (currentTime == remDate). Чего вы на самом деле хотите достичь? –

ответ

0

Если вы видите, что ваш s is Everyday, значит, первое условие выполнено. Но у вас есть и условие с

(currentTime == remDate) && (s.ToUpper() != "SUNDAY") && (s.ToUpper() != "SATURDAY")

, который будет только справедливо, когда время 21:00

, которая не является правдой в это время. Следовательно, условие не выполнено.

3

Потому что это будет работать только в 21:00

UPD: К сожалению, это было ошибкой. Реальная причина в первой строке Вы должны написать DateTime now = DateTime.Now;

0

Начнём, делая ваш код более удобным для чтения, который также помогает показать свои || и && вопросы.

DateTime now = new DateTime(); 
string s = "Everyday"; 
string currentTime = now.ToString("HH:mm"); 
string remDate = "21:00"; //set to a minute or two i the future 
string CurrentDay = "Sunday"; 

if (
    // condition 1 
    (s.ToUpper() == "WORKDAYS") 
    // condition 2 
    || (
     s.ToUpper() == "EVERYDAY" 
     || s.ToUpper() == CurrentDay.ToUpper() 
    ) 
    // condition 3 
    && (
     // condition 3.1 
     (currentTime == remDate) 
     && (s.ToUpper() != "SUNDAY") 
     && (s.ToUpper() != "SATURDAY") 
    ) 
) 
{ 
    // I'm using LINQPad, so I just output this to the results 
    "Success!!!!".Dump(); 
} 

Один выпуск - состояние 3.1: (currentTime == remDate). Учитывая ввод образца, это должно быть правдой, поэтому ваше окно сообщения будет отображаться только в том случае, если время составляет 21:00.

Другая проблема заключается в том, что условие 2 и условие 3 будут (поскольку они соединены с &&) обрабатываются как группа. Это то, что вы на самом деле имели в виду?

Логика этого оператора if трудно понять, а группировка и/или выражения добавляют к путанице.

Попробуйте написать условия на английском языке, возможно, в виде списка пулей и посмотреть, не станет ли ошибка для вас очевидной.

0

Здесь я предполагаю, что ваша переменная CurrentDay равна DayOfWeek.Monday.ToString().ToUpper().

согласно вашему заявлению, это выглядит как

if(false || true && false) 

Поскольку (s.ToUpper() == "WORKDAYS") всегда ложно, пока вы не измените s.
и (s.ToUpper() == "EVERYDAY" || s.ToUpper() == CurrentDay.ToUpper()) всегда верны, пока вы не смените s
и ((currentTime == remDate) && (s.ToUpper() != "SUNDAY") && (s.ToUpper() != "SATURDAY") && (CurrentDay == s)) всегда неверно, потому что (CurrentDay == s) является ложным.

Следовательно, если оператор всегда ложно, то MessageBox.Show("Success!!!!"); не может быть выполнено ..

0

Я получил это работает. Я должен был объяснить это лучше, что я пытался сделать, это проверить время суток, а затем проверить день, а затем выпустить предупреждение, значения берутся от конечного пользователя, хранятся в sqlite db.

Проблема заключалась в группировке и заказе, и у меня была двойная проверка в моем коде.

, что я закончил с было:

if ((s.ToUpper() == "WORKDAYS") || (s.ToUpper() == "EVERYDAY" || s.ToUpper() == CurrentDay.ToUpper()) 
&& ((currentTime == remDate) && (s.ToUpper() != "SUNDAY") && (s.ToUpper() != "SATURDAY"))) 
{ 
} 

Я имел это делать все мои или чеки, а затем был его тянуть в последней группе И, а затем я сгруппировал их, это работает для меня и делает работа.

Я пишу свое собственное напоминание, и это была проверка на день недели, которую я реализовал. Вероятно, это лучший способ сделать это, но это было то, что я придумал.

Спасибо за помощь

0

заменить:

string currentTime = now.ToString("HH:mm"); 

и

(currentTime == remDate)

этим:

DateTime currentTime = DateTime.Now 

и

(currentTime.ToString("HH:mm") == remDate)