【问题标题】:Unity - can't find an object in ListUnity - 在列表中找不到对象
【发布时间】:2015-07-15 13:34:52
【问题描述】:

我在 Unity 中遇到了一些问题,我应该如何通过 ID 或名称从列表中删除项目?我认为这应该可行,但显然不行。

....
List<MyDataType> myList = new List<MyDataType>();
....
public static void removeItemFromList(int id)
{
    foreach (MyDataType item in myList)
    {
        if (item.TypeId == id)
        Debug.Log("List contains ID: " + item.TypeId);
    }
// PRINTS AN OBJECT WITH THE ID - works as expected

    var match = myList.Find(p => p.TypeId == id);
// SEEMS LIKE IT CAN'T FIND THE OBJECT WITH THE ID

    if (match == null)
    {
        Debug.Log("DOES NOT EXIST");
        return;
    }
// always returns DOES NOT EXIST, WHY?

    myList.Remove(match);


}

【问题讨论】:

  • 如果将 .Find 更改为 .FirstOrDefault(p => p.TypeId == id) 会怎样?
  • System.Collections.Generic.List 不包含 .FirstOrDefault 的定义,但我想我已经解决了。而不是 if (match == null) 我使用 if (match.TypeId == null) 并且它似乎正在工作。谢谢大家

标签: c# list unity3d find


【解决方案1】:

我面前没有团结, 但你可以试试myList.Select(item =&gt; item.TypeId == id).SingleOrDefault();

或者如 Fabjan 所说:

myList.SingleOrDefault(item =&gt; item.TypeId == id);

【讨论】:

    【解决方案2】:

    Jasper 是正确的,但请确保将 LINQ 库添加到您的项目中,否则您将无法访问列表中的 FirstOrDefault。这可能就是你找不到它的定义的原因。

    using System.Linq;
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      相关资源
      最近更新 更多