2013-11-15 53 views
1
string number = txtNumber.Text; 

     foreach (Account ac in tabAccounts) 
     { 
      if (txtNumber.Text == ac.Number) 
      { 

       this.Height = 328; 
       lblWelcome.Text = "Welcome: " + ac.Client; 
       break; 
      } 
      else 
      { 
       MessageBox.Show("Account Number not found"); 
      } 

     } 

大家好尋找特定的信息,我是相當新這裏和C#。所以我有一個客戶端信息類Account存儲在一個文本文件中。我想遍歷數組tabAccounts [200]並查看輸入的用戶號碼是否與文本文件中的號碼相對應。它工作正常,但是當我進入讓我們說222它開始循環從乞討,直到它找到了號碼,如果它不是它只是保持循環和消息「賬號找不到」繼續出來。當我刪除else語句它工作正常,但我希望它,當用戶輸入一個錯誤的號碼時,一個消息框將顯示...希望你們得到它:(試圖用谷歌搜索,但沒有發現任何東西..在一個循環

回答

1

最好辦法做到這一點是當你發現的元素設置一個標誌,然後循環

bool found = false; 
string client; 

string number = txtNumber.Text; 

    foreach (Account ac in tabAccounts) 
    { 
     if (txtNumber.Text == ac.Number) 
     { 

      found = true; 
      client = ac.Client; 
      break; 
     } 

    } 

if (found) 
{ 
    this.Height = 328; 
    lblWelcome.Text = "Welcome: " + client; 
} 
else 
{ 
    MessageBox.Show("Account Number not found"); 
} 
+1

這將無法編譯,因爲您正在循環範圍之外訪問'ac'。 –

+0

好點@AndersAbel,請參閱編輯 –

7

這是可以做到更有效的使用LINQ的外顯示:

var account = tabAccounts.SingleOrDefault(a => a.Number == txtNumber.Text); 

if(account != null) 
{ 
    this.Height = 328; 
    lblWelcome.Text = "Welcome: " + account.Client; 
} 
else 
{ 
    MessageBox.Show("Account Number not found"); 
} 

爲了您的原代碼:問題是您正在顯示消息ins ide循環,每次循環沒有找到任何東西。這是一個重寫接近原來的語法,只是告訴你如何做到這一點:

Account foundAccount = null; 

foreach (Account ac in tabAccounts) 
{ 
    if (txtNumber.Text == ac.Number) 
    { 
    foundAccount = ac; 
    break; 
    } 
} 

if(foundAccount != null) 
{ 
    this.Height = 328; 
    lblWelcome.Text = "Welcome: " + foundAccount.Client; 
} 
else 
{ 
    MessageBox.Show("Account Number not found"); 
} 
+0

這裏只是一小段話,在第一個代碼塊的「if」語句中,我想它應該是「account.Client」而不是「ac.Client」。 – Fid

+0

當多個賬戶滿足條件(應該拋出)時,'SingleOrDefault'的行爲與OP的代碼略有不同。 'FirstOrDefault'是一個更直接的翻譯。 –

+0

@Fid:你說得對,修好了。謝謝。 –

3

才達到你的目標所需的最小變化:

string number = txtNumber.Text; 

    bool found = false; 

    foreach (Account ac in tabAccounts) 
    { 
     if (txtNumber.Text == ac.Number) 
     { 

      this.Height = 328; 
      lblWelcome.Text = "Welcome: " + ac.Client; 
      found = true; 
      break; 
     } 
    } 

    if (!found) 
     MessageBox.Show("Account Number not found"); 
+0

工作作爲魅力(:謝謝。 – user2996891

3

的問題是,你不等到您完成搜索以顯示"Account Number not found"時,您會在每次找到不匹配的Account時顯示它。我會使用FirstOrDefault擴展方法將它重寫爲這樣。

string number = txtNumber.Text; 
Account ac = tabAccounts.FirstOrDefault(x => x.Number == txtNumber.Text); 
if (ac != null) 
{ 
    this.Height = 328; 
    lblWelcome.Text = "Welcome: " + ac.Client; 
} 
else 
{ 
    MessageBox.Show("Account Number not found"); 
}