2010-05-24 125 views
5

對不起,問我這個問題,因爲我認爲我知道答案,如果userName大於4個字符或者userName不是名爲student的帳戶,我想退出該程序。但是,即使該用戶名只有3個字符,而不是學生,我仍然擊中了Application.Exit。我究竟做錯了什麼?對我C#簡單IF或問題

if (userName.Length > 4 | userName != "student") 
{ 
    Application.Exit(); 
} 

恥辱:-(

+0

此聲明沒有意義,因爲只有在userName爲'student'的情況下,您的應用纔會退出。 – Andrey 2010-05-24 13:03:16

+0

我需要的是&&如下所示,謝謝大家!如果(userName.Length> 4 && userName!=「student」) } – Jamie 2010-05-24 13:05:55

+0

@Jamie,它再次無用。 '「學生」.Length'>> 4無論如何:) – Andrey 2010-05-24 13:09:33

回答

15

雖然你應該使用||而不是|,他們會在這種情況下給出相同的結果。儘管其他答案upvoting,更改|||不是解決您的問題。

你真正的問題是,你想檢查的條件將永遠是真實的。您的userName不是student,或者它是student,然後它也超過4個字符。

當你有一個只有3個字符的用戶名不等於學生,因此程序退出。

從你的你所期望的描述,我覺得你的意思是這樣的:

if (userName.Length > 4 && userName != "student") 
{ 
    Application.Exit(); 
} 
+0

非常感謝這:-) – Jamie 2010-05-24 13:09:27

6

您需要使用布爾OR(||)運營商,而不是按位OR(|

正如我在我的評論說,雖然,你的邏輯。不一定任何意義,我這是書面方式的方式,該語句將永遠是正確的:

  • 如果用戶名不是學生,語句true並退出應用程序。

  • 如果userName是student,那麼長度> 4,並且語句再次爲真(這會導致退出)。

你可以改變的事情:

if(username.Length > 4 && userName != "student") 
{ 
    Application.Exit(); 
} 

在邏輯上更有意義,但因爲我不知道你的意圖,我不能保證它會工作,你希望它的方式。

+0

'if(userName.Length> 4 || userName!=「student」)' 是否意味着更少? – Andrey 2010-05-24 12:58:41

+0

可以更好地使用Form.Close而不是Application.Exit(如果可能) http://stackoverflow.com/questions/1057151/application-exit – 2010-05-24 12:59:11

+0

@Andrey你是對的,語句的邏輯不明確的意義......但我不能看到他/她的代碼的其餘部分知道什麼是正確的邏輯。我所能看到的只是他顯然使用錯誤的操作員來進行比較。 – 2010-05-24 13:01:10

0
if (userName.Length > 4 || userName.ToLower() != "student") 
{ 
    Application.Exit(); 
} 

試試這個。

+0

通知ToLower() – kd7 2010-05-24 12:55:53

+0

取決於UI如何接受輸入,'ToLower()'可能忽略不計。此外,它可能是一個區分大小寫的用戶名... – James 2010-05-24 13:00:16

+0

仍然更安全的艾莫,有時你想知道爲什麼我的條件是沒有打及其簡單的情況下。 – kd7 2010-05-24 13:04:56

0

通過觀察您的要求爲您的字符長度檢查是微不足道的,或者至少你沒有提到的理由你想檢查字符的長度。從您提供的示例中,我只需檢查if (userName != "student")我沒有看到需要額外的檢查,這是可以在UI中強制執行的。

0

如果我沒有錯,當條件爲真時,您正嘗試進入if循環。 即進入if循環

  1. 當長度大於。
  2. 當使用者名稱不能等於「學生」

條件類似於username =「ABC」是不是「學生」,你的條件仍然是對的,並會進入。當userName等於=「student」時它仍然會執行;

這裏你應該使用AND運算符而不是OR運算符。

if (userName.Length > 4 & userName != "student") 
    { 
    Application.Exit();     
    } 

您也可以實現與& &運營商相同的結果。 & opertor與& &運營商相同。 當X = false且Y爲真時; Y根本不會被評估。由於X已經是假的。這個方法也叫短路評估。