c#node struct自定义LinkedListNode结构中的循环依赖
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#node struct自定义LinkedListNode结构中的循环依赖相关的知识,希望对你有一定的参考价值。
所以,我试图在c#中编写一个新的链表,它在不安全的上下文中表现正常,所以我可以将它传递给多线程进程。不幸的是,即使我需要的是一个恒定大小的指针,这也是一个循环依赖。我宁愿不把它变成一个类,我也不确定它会在不安全的环境中表现出来。我也不认为接口解决方案在我的情况下会起作用,因为它实际上是指向自身的指针。此外,当我尝试编写它时,它会抱怨一些代码正在被管理......我该如何解决?这是代码片段:
struct UnsafeLinkedListNode<T>
{
public T value;
unsafe public UnsafeLinkedListNode<T>* next;
unsafe public UnsafeLinkedListNode<T>* prev;
}
class UnsafeLinkedList<T>
{
unsafe public UnsafeLinkedListNode<T>* head = null;
unsafe public UnsafeLinkedListNode<T>* tail = null;
public ulong count;
public void AddAfter(T value)
{
UnsafeLinkedList<T> temp = new UnsafeLinkedList<T>();
temp.value = value;
AddAfter(temp);
}
public void AddAfter(UnsafeLinkedListNode<T>* value)
{
unsafe
{
if(head !=null)
{
value.prev = tail;
value.next = null;
tail.next = value;
count++;
}
else
{
value.next = null;
value.prev = null;
head = value;
tail = value;
count++;
}
}
}
}
答案
这解决了循环依赖和代码管理问题。最后在3天后解决,然后在发布后的几分钟内解决。不幸的是,由于某种原因,仍然存在尝试获取节点地址的问题,但这是此问题的解决方案:
struct UnsafeLinkedListNode
{
public EncodedData value;
unsafe public UnsafeLinkedListNode* next;
unsafe public UnsafeLinkedListNode* prev;
}
class UnsafeLinkedList
{
unsafe public UnsafeLinkedListNode *head = null;
unsafe public UnsafeLinkedListNode *tail = null;
public ulong count { get; private set; }
unsafe public void AddAfter(EncodedData value)
{
UnsafeLinkedListNode temp = new UnsafeLinkedListNode();
temp.value = value;
AddAfter(&temp);
}
unsafe public void AddAfter(UnsafeLinkedListNode* value)
{
unsafe
{
if(head !=null)
{
value->prev = tail;
value->next = null;
tail->next = value;
count++;
}
else
{
value->next = null;
value->prev = null;
head = value;
tail = value;
count++;
}
}
}
}
以上是关于c#node struct自定义LinkedListNode结构中的循环依赖的主要内容,如果未能解决你的问题,请参考以下文章