Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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# - Fatal编程技术网

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的回答来看,这就是实际发生的情况。