.net - 如何创建通用链表?

标签 .net generics c#-3.0 list linked-list

我正在尝试使用通用链接列表来保存应用程序中的一些工作流程步骤。以下是我将其保存到数据库的方法。

订单ID  WorkFlowStepID  ParentWorkFlowStepID
178373    1                        NULL
178373    2                        1
178373    3                        2

我将此数据集返回到数据读取器对象中。然后,我循环访问数据读取器并创建一个包含 WorkFlowStepID 属性和 ParentWorkFlowStepID 属性的 WorkFlowStep 对象。我使用 .AddFirst() 方法将第一个对象添加到我的 LinkedList 中。我的下一个想法是创建下一个对象,然后将其插入 LinkedList 中的对象后面,其中它的 WorkFlowStepID 等于新对象的 ParentWorkFlowStepID。我无法弄清楚如何在 LinkedList 中找到该对象。 find() 方法要求提供一个值,但我不明白它是什么值,也不知道如何找到它。

最佳答案

那么你的意思是你正在使用 linked list class in the framework

如果是这样,Find方法并没有真正做到你想要的。基本上你想要一个带有谓词的版本。如果该类公开 LinkedListNode<T> 的迭代器,这会更容易。幸运的是,很容易提供一个扩展方法来做到这一点:

public static IEnumerable<LinkedListNode<T>> GetNodes<T>(this LinkedList<T> list)
{
    LinkedListNode<T> current = list.First;
    while (current != null)
    {
        yield return current;
        current = current.Next;
    }
}

然后你可以这样做(我强调所有这些都未经测试):

var node = list.GetNodes().FirstOrDefault(x.Value.WorkFlowerStepID = parentWorkFlowStepID);
if (node != null)
{
    list.AddAfter(node, newItem);
}
else
{
    // Whatever. Add to tail?
}

关于.net - 如何创建通用链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/299950/

相关文章:

c# - 通过解析将字符串转换为日期时间

c# - .NET 4 中的多线程改进

c# - 获取注册表项值的最简单方法

java - Spring获取泛型类型类

javascript - 无法加载文件或程序集 'Noesis.Javascript.dll'

.net - 来自 .NET 程序的 IMS 数据库

c# - 解析 MDX 字符串的 CLR 函数

c# - 在重载方法上使用泛型参数

java - 使用枚举作为我的类的通用类型但无法创建实例

c# - C# 2 和 3 之间的区别