【问题标题】:Access instance by Value in LinkedListLinkedList中按值访问实例
【发布时间】:2014-01-30 09:50:54
【问题描述】:

我有这样的课:

public class foo {
    int par1;
    int par2;
}

我还有一个 foo 类型的链表:

public static LinkedList<foo> fooList = new LinkedList<foo>();

我想按值访问这个类:

fooList.Find(???);

我可以放置什么而不是 ???价值?

【问题讨论】:

    标签: c# class linked-list


    【解决方案1】:

    LinkedList&lt;T&gt;Find 方法将采用 T(在您的情况下为 foo)并使用其相等方法(在您的情况下引用相等性 - 相同的对象 - 因为您正在创建一个 @987654329 @) 来确定相等性。

    如果您想通过其他一些相等的定义(例如成员的内容)来查找,那么您可以使用LINQ

    var found = fooList.First(f => f.par1 == 1);
    

    获取第一个匹配项(如果没有找到则抛出)。如果未找到,请使用 FirstOfDefault 返回 null

    【讨论】:

    • 对 FindI() 方法的作用的简短说明。
    • 非常感谢。这很有用。
    【解决方案2】:

    如果“按值”表示foo 的实例,则只需传递foo 的实例。

    foo foo1 = new foo();
    foo foo2 = new foo();
    foo foo3 = new foo();
    
    var linkedList = new LinkedList<foo>(new[] {foo1, foo2, foo3});
    
    LinkedListNode<foo> node = linkedList.Find(foo2);
    

    【讨论】:

      【解决方案3】:

      你可以使用 Linq:

      foo item = fooList.FirstOrDefault(i => i.par1 == 201);
      

      如果您要使用大量对象,请考虑使用字典:

      var dict = new Dictionary<int, foo>();
      dict.Add(201, new foo(){par1 = 201, par2 = 567});
      // ... add a lot of foo objects   
      foo item = dict[201];
      

      (这个例子展示了如何通过 par1 值找到 foo 对象)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 2021-06-28
        • 2012-07-04
        相关资源
        最近更新 更多