c#按引用或按值

fre*_*hie 1 c#

假设我有一个对象列表,我正在从列表中提取和修改项目,如下所示:

List<MyObject> TheListOfObjects = new List<MyObject>();
MyObject TheObject = new MyObject();

TheListOfObjects = //some json deserialization result

TheObject = (from o in TheListOfObject
             where o.ID == SomeParameter
             select o).SingleOrDefault();

TheObject.SomeProperty = SomeValue;
Run Code Online (Sandbox Code Playgroud)

当我写作TheObject.SomeProperty = SomeValue;时,我:

  1. 修改列表中的项目,在这种情况下我已完成或
  2. 修改一个新项目,我必须用我刚修改的项目替换列表中的原始项目.

Ant*_*ram 6

要看.

如果对象列表是类实例列表,则TheObject变量将保存作为引用的值.该引用也将存在于列表中.两者中都可以看到该参考对象的修改.重要提示:写入变量中包含的引用(即变量重新分配)将不会持久保存到列表中,写入列表中的引用也不会持久保存到变量中.

如果对象列表是结构实例的列表,TheObject则只包含该,并且该值的突变在列表中不可见.


GSe*_*erg 5

这取决于MyObject是类还是结构.

如果它是一个类,那么你正在修改原始对象.
如果它是结构,那么您正在修改副本.