gpt4 book ai didi

c# - 为什么我的第二个变量值在更新第一个时会发生变化?

转载 作者:太空宇宙 更新时间:2023-11-03 19:07:23 24 4
gpt4 key购买 nike

我有一个带有两个 Datalog 类变量的表单

public partial class ModifyDataForm : Form
{
public DataLog DLog;
private DataLog copyCurrent;

public ModifyDataForm(DataLog log, int selectIndex = 0)
{
InitializeComponent();
DLog = (DataLog)log.Clone();
copyCurrent = (DataLog)log.Clone();
}
}

当我更新 DLog 的值时,copyCurrent 的值也会发生变化,为什么?

下面是我更新变量的函数

    private void smooth_Click(object sender, EventArgs e)
{
int NValues; int POrder;
if (getSmoothParameters(out NValues, out POrder))//parameters are valid
{
float[] yvalues = DataLog.convertStringArrayToFloats(DLog.Data[labelIndex]);
float[] newyvalues = Filters.smooth.SavitzkyGolay(yvalues, NValues, POrder);



//I am updating the values of DLog here,
//but the values of copyCurrent also changes
DLog.Data[labelIndex] = Array.ConvertAll(newyvalues, x => AuxillaryFunctions.DecimalPlaceNoRounding((double)x));



((ViewDigiFiles)this.Owner).updateSelectedLog(DLog);
((ViewDigiFiles)this.Owner).glControl1.Invalidate();
}
else//parameters are NOT valid
{
MessageBox.Show("Invalid smoothing parameters.");
return;
}
}

最佳答案

copyCurrent 的值不会改变。 copyCurrent 引用 对象中的数据可能会改变,但那是另一回事。

假设您给两个不同的人(爱丽丝和鲍勃)一张纸,上面写着您的家庭住址。爱丽丝去把你的前门漆成红色。这是否改变了 Bob 的纸条?不会 - 但如果 Bob 访问他纸上的地址,他仍然会看到一个红色的前门。

这是值类型和引用类型如何在 C# 中工作的基础部分。当一个变量是引用类型时,它的值不是对象本身——它是一个引用,就像一个街道地址——它是一种导航到对象的方式。将一个变量的值复制到另一个变量中只是复制引用,就像将街道地址从一张纸复制到另一张纸上一样。

区分变量、引用和对象是非常重要的。看我的article on value types and reference types (或任何优秀的 C# 入门书籍)以获取更多详细信息。

关于c# - 为什么我的第二个变量值在更新第一个时会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com