gpt4 book ai didi

C#对象修改: a strange behaviour

转载 作者:太空狗 更新时间:2023-10-29 21:54:25 26 4
gpt4 key购买 nike

我正在开发一个 WPF C# 应用程序,我在修改对象时有一个奇怪的行为。我试着用一般的方式来解释它。假设您有一个描述如下的类的对象:

public class A
{
int one;
bool two;
List<B> listofBObjects;
}

其中 B 是:

public class B
{
int three;
int four;
}

我将一个A类的实例和一个B类的实例从一个窗口传递到另一个窗口,只在第二个窗口中定义了两个类型A和B的变量并在Show()方法之前传递它们,代码如下,执行到窗口 FirstWindow 的实例中:

SecondWindow newWindow = new SecondWindow();
newWindow.instanceOfA = this.instanceOfA; //instanceOfA is of type A
newWindow.instanceOfB = this.instanceOfA.listOfBObjects[0]; //instanceOfB is of type B
newWindow.Show();

如果我必须重复此代码两次(即打开两次窗口),在第一次执行时一切都按预期进行,事实上如果我修改 instanceOfB 变量中的值,我会看到修改也在 instanceOfA 变量中。但是,在第二次执行时,instanceOfB 中的修改不会影响instanceOfA ...修改是在 newWindow 中完成的。例如:

this.instanceOfB.three++;
this.instanceOfB.four--;

假设您在 FirstWindow 中。单击一个按钮,SecondWindow 将打开,并按上述方式传递两个变量。在 SecondWindow 中,做一些修改,单击 OK,然后 SecondWindow 关闭,将控制返回给 FirstWindow。如果我重新单击同一个按钮,我会重新打开 SecondWindow。如果我现在进行修改,它们不会影响两个变量。

我尝试(在 VS2012 中)使用控制表达式查看控制台中的两个变量,我发现,在第一遍代码中,两个变量在执行上述代码时都会发生变化,但在第二遍代码中, 只有 instanceOfB 改变...

编辑:按照我用来将参数传递给 SecondWindow 的代码...类型解释如下

 IntermediatePosition obj = ((FrameworkElement)sender).DataContext as IntermediatePosition; //IntermediatePosition is Class B
IntermediatePositionsSettingsWindow ips = new IntermediatePositionsSettingsWindow();
ips.currentIntermediatePosition = obj;//this is the instanceOfB
ips.idxOfIpToModify = obj.index;
ips.currentSingleProperty = this.currentPropertyToShow; //this is the instanceOfA object
ips.sideIndex = this.sideIndex;
ips.ShowDialog();

考虑到 obj 是由一个按钮选择给出的数据网格,其中每一行代表一个 IntermediatePosition 对象。在数据网格中,有一个列按钮,单击按钮,IntermediatePositionsSettingsWindow 将打开并显示正确的数据

编辑:我已经执行了以下检查:

this.currentPropertyToShow.sides[this.sideIndex].intermediatePositionList[i].Ge‌​tHashCode() == obj.GetHashCode()

其中 i 是相关 IntermediatePosition 对象的索引。第一次使用 IntermediatePositionsSettingsWindow 对象结果相等,但在第二次使用时它们不同

为什么会发生这种情况?如果需要任何其他说明,我将编辑问题谢谢

最佳答案

很难给出正确的答案,因为没有足够的代码来正确解决这个问题。但是,如果您要进行数据绑定(bind),那么我相信您需要实现 this界面。您的问题可能只是您的模型没有反射(reflect)屏幕的变化。

关于C#对象修改: a strange behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018845/

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