为什么修改一个对象数组不会改变我的对象?

时间:2013-10-08 07:49:49

标签: c# arrays

我有来自网格的DataRow,我需要在一行中修改几列。所以我将所有列都放在Array中,并尝试修改它们,但它不能按我的意愿工作。我需要一个解释。

我的目标是在Array或某个集合中按特定顺序获取所有列,然后修改它们等等。我想我现在正在创建一些引用除了我的列以外的其他内容的新对象。也许我应该尝试在收藏中存储一些参考?使用ref应该是最佳选择吗?

DataRow dr = rows[i] as DataRow;
dr["size"] = 5000; // => size is 5000;
ChangeSize(dr); // => size is 6000;

ChangeSize body

private void ChangeSize(DataRow dataRow)
{
             dataRow["size"] = 6000; // => size is 6000
             Object[] arrayOfColumns= { dataRow["size"], ... };
             arrayOfColumns[0] = 7000; // => won't change size...

}

2 个答案:

答案 0 :(得分:1)

只是更改数组中的值。您碰巧通过dataRow["size"]对其进行初始化,但这并不意味着两者之间存在任何永久链接。

如果您需要将更改反映回DataRow,我怀疑您应该采用其他方法来执行此操作:

private void CopyToDataRow(Object[] source, DataRow target)
{
    target["size"] = source[0];
    // etc
}

无论何时修改数组都没有触发自定义代码的概念 - 您需要在适当的时候调用它。 (不,ref根本不会帮助你。)

答案 1 :(得分:1)

dataRow [“size”]包含一个int值,它是一个值类型。

当您对arrayOfColumns进行实例化和初始化时,您将获得dataRow [“size”]中包含的值的副本,而不是引用。