2017-01-17 34 views
1

爲了簡化,可以說我有一個方法應該從用戶列表中找到的ID返回一個User對象。如果沒有用戶被發現,我想拋出一個異常。如果lambda表達式失敗,則拋出異常

我當前的代碼工作:

public User GetUserFromID(int id) 
    { 
     foreach (User u in Users) 
      if (u.id == id) 
       return u; 

     throw new Exception("No user is found"); 
    } 

但我的問題是當我想找到一個Lambda表達式,而不是foreach循環的用戶。以下代碼成功返回正確的用戶對象,但如果未找到任何內容,則永遠不會引發異常。

public User GetUserFromID(int id) 
    { 
     return Users.Find(u => u.id == id); 

     throw new Exception("No user is found"); 
    } 

希望你能幫助:-)

回答

1

你可以使用User.Single(...),這將拋出一個異常,如果不是正好有一個匹配:

public User GetUserFromID(int id) 
{ 
    return Users.Single(u => u.id == id); 
} 

只是爲了完整性,如果你想拋出自己的異常,那麼你可以做這樣的事情。

使用SingleOrDefault將返回null如果沒有匹配,或者如果有多於1場,這樣你就可以檢查null,以確定是否異常應拋出:

public User GetUserFromID(int id) 
{ 
    var user = Users.SingleOrDefault(u => u.id == id); 

    if(user == null) 
     throw new Exception("No user is found"); 

    return user; 
} 
+0

謝謝,這個工程:-) – Rasmus

0
public User GetUserFromID(int id) 
    { 
     return Users.Single(u => u.id == id); 
    } 

Users.Single會沒有完全匹配時拋出異常。

+0

謝謝.. :-) – Rasmus

相關問題