나는 서로간에 일대일 매핑을 제공하는 다음 두 클래스가 있습니다. 어떻게 두 번째 테스트를 실행할 때 null 값을 처리 할 stackoverflow 예외가 얻을. 이 재귀 사이클을 어떻게 멈출 수 있습니까? 감사합니다.개체 간 일대일 매핑 유지
[TestMethod]
public void SetY()
{
var x = new X();
var y = new Y();
x.Y = y;
Assert.AreSame(x.Y, y);
Assert.AreSame(y.X, x);
}
[TestMethod]
public void SetYToNull()
{
var x = new X();
var y = new Y();
x.Y = y;
y.X = null;
Assert.IsNull(x.Y);
Assert.IsNull(y.X);
}
public class X
{
private Y _y;
public Y Y
{
get { return _y; }
set
{
if(_y != value)
{
if(_y != null)
{
_y.X = null;
}
_y = value;
if(_y != null)
{
_y.X = this;
}
}
}
}
}
public class Y
{
private X _x;
public X X
{
get { return _x; }
set
{
if (_x != value)
{
if (_x != null)
{
_x.Y = null;
}
_x = value;
if (_x != null)
{
_x.Y = this;
}
}
}
}
}
수행하려는 작업은 무엇입니까? –
내가 x.Y를 null로 설정하면 둘 다 서로를 참조하기 때문에 x.Y와 y.X가 모두 null 일 것으로 예상됩니다. 기본적으로 두 객체간에 양방향 참조를 유지하려고합니다. –
이 디자인을 다시 고려할 수 있습니다. –