2012-06-27 70 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

用户是一个类,所以你实际上并没有复制用户,你只是将一个引用(或者一个指针,因为它有时称为)复制到该用户。该引用的两个副本都将“查看”对基础对象的任何更改。