双重链接的不可变对象(C# 记录)

问题描述 投票:0回答:1

我想创建双向链接对象(父级与子级,其中 Parent.Child 属性指父级的子级,Child.Parent 指子级的父级)。

据我所知,如果我使用反射来修改第一个创建的记录,并在创建它后链接到第二个记录,则只有 C# 记录才可能实现这一点。

或者有更方便的方法吗?

我尝试过的:设置构造函数调用,并观察到在构造将传递到父级构造函数的子级时不可能传递“父级”引用。

c# constructor immutability record two-way-binding
1个回答
1
投票

使用可变容器来保存链接。

class ItemContainer<T>
{
    public T Item { get; set; }
    public ItemContainer<T> Child { get; set; }
    public ItemContainer<T> Parent { get; set; }
}

var linkedList = new List<ItemContainer<MyRecordType>>();

var item1 = new ItemContainer<MyRecordType>();
var item2 = new ItemContainer<MyRecordType>();
item1.Child = item2;
item1.Item = new MyRecordType { Initialization data 1 };
item2.Parent = item1;
item2.Item = new MyRecordType { Initialization data 2 };

linkedList.Add(item1);
linkedList.Add(item2);

var childOfItem1 = item1.Child.Item;
var parentOfItem2 = item2.Parent.Item;

如果您愿意,您可以设计自己的链表类来隐藏可变容器的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.