Я застрял на том, что, как я думал, будет очень простой проблемой. Я пытаюсь перенаправить пользователя на другой веб-сайт, если UserAgent не содержит ряд строк. Часть, которую я не могу понять, заключается в том, что оператор if отлично работает, если я использую приведенный ниже код. Я доволен результатами с этим, но что-то говорит мне, что это не хорошая практика, чтобы иметь только инструкцию else и ничего не выполнять, если утверждение доказывает истинность.Оператор C# if с string.Contains() не работает как ожидалось
string strUserAgent = Request.UserAgent.ToString().ToLower();
if (strUserAgent != null)
{
if (Request.Browser.IsMobileDevice == true ||
strUserAgent.Contains("iphone") ||
strUserAgent.Contains("blackberry") ||
strUserAgent.Contains("mobile") ||
strUserAgent.Contains("windows ce") ||
strUserAgent.Contains("opera mini") ||
strUserAgent.Contains("palm") ||
strUserAgent.Contains("android"))
{
// Is this normal practice to only have an else block?
}else
{
Response.Redirect(AppState["redirectBack"].ToString());
}
Когда я пытаюсь выполнить следующий блок кода, сценарий перенаправляет пользователя независимо от того, что содержит строка UserAgent. Может кто-нибудь объяснить, почему это может произойти?
string strUserAgent = Request.UserAgent.ToString().ToLower();
if (strUserAgent != null)
{
if (Request.Browser.IsMobileDevice != true ||
!strUserAgent.Contains("iphone") ||
!strUserAgent.Contains("blackberry") ||
!strUserAgent.Contains("mobile") ||
!strUserAgent.Contains("windows ce") ||
!strUserAgent.Contains("opera mini") ||
!strUserAgent.Contains("palm") ||
!strUserAgent.Contains("android"))
{
Response.Redirect(AppState["redirectBack"].ToString());
}
Кстати, вместо того, чтобы этот гигантский 'contains' блок, почему бы вам не поставить все из строки в коллекцию и просто делать «Содержит»? Это резко упростило бы это. – Arran
Вы перевернули его неправильно. Изменяя '==' на '! =' И 'Contains' на'! Contains', но оставляя '' '' 'as-is, вы только входите в блок, если все' Contains' являются true. Вы можете изменить все '' '' '' на '&&' или отменить отдельные отрицания и обернуть все это с помощью '!()'. – yoozer8