Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么修改对象数组不';我不能改变我的物品吗?_C#_Arrays - Fatal编程技术网

C# 为什么修改对象数组不';我不能改变我的物品吗?

C# 为什么修改对象数组不';我不能改变我的物品吗?,c#,arrays,C#,Arrays,我有网格中的DataRow,我需要修改一行中的几列。所以我把我所有的列都放在数组中,并试图修改它们,但并没有如我所愿。我需要一个解释 我的目标是在数组或某个集合中按特定顺序获取所有列,然后修改它们等等。我想我现在正在创建一些新对象,这些对象引用的不是我的列。也许我应该试着在收藏中储存一些参考资料?使用ref应该是最好的选择吗 DataRow dr = rows[i] as DataRow; dr["size"] = 5000; // => size is 5000; ChangeSize(

我有网格中的DataRow,我需要修改一行中的几列。所以我把我所有的列都放在数组中,并试图修改它们,但并没有如我所愿。我需要一个解释

我的目标是在数组或某个集合中按特定顺序获取所有列,然后修改它们等等。我想我现在正在创建一些新对象,这些对象引用的不是我的列。也许我应该试着在收藏中储存一些参考资料?使用ref应该是最好的选择吗

DataRow dr = rows[i] as DataRow;
dr["size"] = 5000; // => size is 5000;
ChangeSize(dr); // => size is 6000;
可变尺寸车身 您只是在更改数组中的值。您碰巧通过
dataRow[“size”]
初始化了它,但这并不意味着两者之间存在任何永久的联系

如果您需要将更改反映回
数据行
,我想您应该有另一种方法:

private void CopyToDataRow(Object[] source, DataRow target)
{
    target["size"] = source[0];
    // etc
}
没有在修改数组时触发这样的自定义代码的概念-您需要在适当的时间调用它。(不,
ref
在这里对您毫无帮助。)

dataRow[“size”]包含一个值类型的int


实例化和初始化arrayOfColumns时,会得到dataRow[“size”]中包含的值的副本,而不是引用。

是否有方法使用该对象的引用初始化数组?或者我应该像Jon Skeet在下面写的那样复制值?在这种情况下,您不能使用ref。正如Jon Skeet注意到的,您应该使用额外的方法来更新值。我在应用程序中使用该方法。很高兴听到裁判不帮忙。
private void CopyToDataRow(Object[] source, DataRow target)
{
    target["size"] = source[0];
    // etc
}