2010-04-16 58 views
0

由於某種原因,當db爲空時,此方法將返回什麼?編譯很好,using塊之外沒有return語句。使用語句在此方法中將返回什麼?

public Guid GetUserId(string username) 
    { 

     using (AndeDBEntities db = new AndeDBEntities()) 
     { 
      var userId = 
       from u in db.Users 
       where u.Username == username 
        && u.Deleted != true 
       select new { UserID = u.UserId }; 
      if (userId == null || userId.Count() == 0) 
       return Guid.Empty; 
      else 
       return userId.First().UserID; 
     } 
    } 

回答

2

如果由於某種原因db爲空,這可能會在運行時引發異常。這很可能是NullReferenceException,但可能是一些其他異常,具體取決於它是如何寫入的。

但是,這確實不應該是可能的。 db應始終有效,但如果構造函數(AndeDBEntities)未正確設置,db.Users可能爲null。在這種情況下,當你打LINQ查詢時(例如訪問db.Users),你會得到一個NullReferenceException

+0

@Reed:當訪問db.Users或調用userId.Count()或userId.First()時,會發生異常嗎?我的理解是,由於延遲執行LINQ查詢,它不會實際執行查詢,直到迭代或訪問。 – 2010-04-16 17:53:03

+0

@Chris:它會碰到db.Users,因爲它需要訪問它試圖構建表達式樹。它不會實際遍歷用戶,但它仍然會擊中它... – 2010-04-16 18:59:33

1

db不會爲空。如果新分配失敗,將拋出一個內存不足的異常並且永遠不會執行using塊,並且該函數不會返回一個值(因爲異常也會從該函數中溢出)。

0

正常情況下db不能爲空。

唯一的辦法是,如果new失敗,在這種情況下,你會遇到更嚴重的問題。

相關問題