можно ли просто не создавать вложенные ссылки с помощью инициализаторов объектов?
Вы правы - вы не можете. Был бы цикл; A требует B для инициализации, но B требует A раньше. Если быть точным - вы, конечно, можете создавать инициализаторы вложенных объектов, но не с циклическими зависимостями.
Но вы можете - и я бы посоветовал вам по возможности - обойти это следующим образом.
public class A
{
public B Child
{
get { return this.child; }
set
{
if (this.child != value)
{
this.child = value;
this.child.Parent = this;
}
}
}
private B child = null;
}
public class B
{
public A Parent
{
get { return this.parent; }
set
{
if (this.parent != value)
{
this.parent = value;
this.parent.Child = this;
}
}
}
private A parent = null;
}
Построение отношения внутри свойства имеет то преимущество, что вы не можете получить несоответствующее состояние, если забыли одно из утверждений инициализации. Совершенно очевидно, что это неоптимальное решение, потому что вам нужно два оператора, чтобы выполнить одно.
b.Parent = a;
a.Child = b;
Имея логику в свойствах, вы получаете результат только с одним утверждением.
a.Child = b;
Или наоборот.
b.Parent = a;
И, наконец, с синтаксисом инициализатора объекта.
A a = new A { Child = new B() };