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结构中的循环依赖的主要内容,如果未能解决你的问题,请参考以下文章

如何让C#设计器编辑我的struct属性?

C语言自定义数据类型之结构体

3-4 8精彩算法集合。struct(C,ruby)

C语言题目。

数据结构基础---C语言实现单链表

C语言中怎样定义动态一维数组