2012-06-27 100 views
1

我有以下是否更改變量的副本更改原始?

foreach (var user in Entities.User) 
      { 
       bool any = Entities.Person.Any(
        p => p.Name == user.Name); 
      } 

訪問修改關閉錯誤的代碼,所以我把它改成

foreach (var user in Entities.User) 
      { 
User theUser = user; 
       bool any = Entities.Person.Any(
        p => p.Name == theUser.Name); 
      } 

現在的問題是,我希望能夠修改屬性的用戶對象。如果我執行以下任一操作,這有什麼關係嗎?當我在DbContext上調用SaveChanges時,它們是否都會保存到數據庫?

user.Property = 1; 

theUser.Property = 1; 
+2

您應該在代碼中運行類似的測試以驗證下面的答案。習慣看到什麼是對象與對象本身的引用。 – BlackVegetable

+0

鑑於'Any'立即執行(即未延期),因此不需要捕獲本地範圍的變量。您可以放心地忽略警告(儘管爲了理智,最好讓它消失)。 – spender

回答

3

是。 User在這種情況下很可能是referencec類型,因此該類型的變量只是指向實例的引用。分配只是改變另一個變量指向同一個實例。

2

這些是參考類型。所以這兩個變量都指向同一個對象。兩種情況下,Property都會更改。

2

用戶是一個類,所以你實際上並沒有複製用戶,你只是將一個引用(或者一個指針,因爲它有時稱爲)複製到該用戶。該引用的兩個副本都將「查看」對基礎對象的任何更改。