2015-07-15 4 views
2

Я столкнулся с некоторыми проблемами в Unity, как я должен удалить элемент из списка по его идентификатору или имени? Я думаю, что это должно сработать, но, очевидно, это не так.Unity - не удается найти объект в списке

.... 
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); 


} 
+0

Что делать, если вы меняете .Find .FirstOrDefault (p => p.TypeId == id)? – Fabjan

+1

System.Collections.Generic.List не содержит определения для .FirstOrDefault, но я думаю, что решил это tho. Вместо if (match == null) я использовал if (match.TypeId == null) и, похоже, работает. Всем спасибо – John

ответ

1

У меня нет единства передо мной, но вы можете попробовать myList.Select(item => item.TypeId == id).SingleOrDefault();

или Fabjan гласит:

myList.SingleOrDefault(item => item.TypeId == id);

0

Джаспер правильно, но убедитесь, что вы добавляете библиотеку LINQ в свой проект или у вас не будет доступа к FirstOrDefault в списке. Возможно, поэтому вы не можете найти определение для него.

using System.Linq; 
Смежные вопросы