C# 更改方法中的数组值
我遇到了一个我无法理解的奇怪行为,我想知道是否有人能帮助我理解它。C# 更改方法中的数组值,c#,C#,我遇到了一个我无法理解的奇怪行为,我想知道是否有人能帮助我理解它。 下面的方法接收一个对象数组,并对数组成员进行一些更改 public static void adjustRow(object[] row, String column) { Double price ,units ,invest; if (!(Double.TryParse(row[3].ToString(),out price)
下面的方法接收一个对象数组,并对数组成员进行一些更改
public static void adjustRow(object[] row, String column)
{
Double price ,units ,invest;
if (!(Double.TryParse(row[3].ToString(),out price)
& Double.TryParse(row[4].ToString(),out units)
& Double.TryParse(row[5].ToString(),out invest)))
return ;
switch (column)
{
case INVEST: row[4] = Math.Round(invest / price,2); break;
case UNITS:
case PRICE: row[5] = Math.Round(units * price,2); break;
}
}
以下方法调用上述方法:
void editGrids_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridView gridView = sender as DataGridView;
DataTable source= null;
if (gridView != null)source = gridView.DataSource as DataTable;
if (source != null)
Systm.adjustRow(source.Rows[e.RowIndex].ItemArray,gridView.Columns [e.ColumnIndex].HeaderText);
}
我希望输入数组中的值也会在第一个方法范围之外发生更改,但实际结果是,这些值保持不变。任何解释?感谢Eran,您需要通过引用而不是通过值传递数组
您需要通过引用而不是通过值传递数组 有什么解释吗 当然,我可以想出很多解释 1) gridView为空 2) gridView.DataSource不是数据表 3) 对TryParse的一个调用返回false。(注意:您可能打算使用&,而不是&。) 4) 列与投资、单位或价格不匹配 5) 写入数组的值与已存在的值相同 以上任何一项都可以解释你的观察结果 有什么解释吗 当然,我可以想出很多解释 1) gridView为空 2) gridView.DataSource不是数据表 3) 对TryParse的一个调用返回false。(注意:您可能打算使用&,而不是&。) 4) 列与投资、单位或价格不匹配 5) 写入数组的值与已存在的值相同
以上任何一项都可以解释你的观察。你能解释一下原因吗??数组中没有引用他保存的值吗??我描述的行为不符合你链接中的示例4,冲突我无法理解除非我遗漏了什么,你给出的链接说Eran的代码应该更改数组。你能解释一下为什么吗??数组中没有引用他保存的值吗??我描述的行为不符合你链接中的示例4,冲突我无法理解除非我遗漏了一些东西,你给出的链接说Eran的代码应该更改数组。我可以看到第一个方法中的更改,但它们没有反映在方法范围之外……你如何看待第一个方法中的更改?我在第一个方法中添加了breack poin,看到值在方法范围内按预期发生了变化,我甚至尝试返回数组,返回的数组很好,但我无法理解为什么我要重新运行它,而值的变化无论如何都会影响方法之外的值;数组是变量的集合。更改变量应该可以在引用该数组的任何地方看到。因此:可能您正在查看的数组实际上并不是彼此相同的引用。例如,如果您说typeof(string).GetConstructors()[0]=null;Console.WriteLine(typeof(string).GetConstructors()[0]==null);你会得到“假”;GetConstructors返回的两个数组是两个不同的数组。听nobugz的回答,这就是实际发生的情况。我可以看到第一个方法中的更改,但它们没有反映在方法范围之外……您如何看待第一个方法中的更改?我在第一个方法中添加了breack poin,看到值在方法范围内按预期发生了变化,我甚至尝试返回数组,返回的数组很好,但我无法理解为什么我要重新运行它,而值的变化无论如何都会影响方法之外的值;数组是变量的集合。更改变量应该可以在引用该数组的任何地方看到。因此:可能您正在查看的数组实际上并不是彼此相同的引用。例如,如果您说typeof(string).GetConstructors()[0]=null;Console.WriteLine(typeof(string).GetConstructors()[0]==null);你会得到“假”;GetConstructors返回的两个数组是两个不同的数组。从nobugz的回答来看,这就是实际发生的情况。