起初我不太确定它是什么,所以我也尝试使用类似 listx.Exsist(SomePredicate) 的东西。该列表具有固定长度并且包含空值。
(用于在Unity中构建库存系统。)
我的(非常)简化的代码:
public class Item
{
public int id;
public string itemname;
// constructor etc ...
}
// in another class:
List<Item> inventory = new List<Item>();
for (int i = 0; i < 4; i++)
{
inventory.Add(null);
}
inventory[0] = new Item(0, "YellowBox");
inventory[1] = new Item(1, "RedBox");
// inventory[2] stays null
// inventory[3] stays null
string itemname = "RedBox";
inventory.Exists(item => item.itemname == itemname)
// WORKING because it finds a match before it runs into a null
string itemname = "BlueBox";
inventory.Exists(item => item.itemname == itemname)
// NOT WORKING, I guess because it runs into a null in inventory[2]
// and it can't get an itemname from null
有人知道先检查 null 或有 .Exsist 的替代方案吗?写下这个问题我现在有了一个想法。我认为仅跳过 null 是不够的,因为我需要索引,但也许是这样的。
public int FindItemIndex(string itemname)
{
int index;
for (int i = 0; i < 4; i++)
{
if (inventory[i] == null) { index = -1; continue; }
if (inventory[i].itemname == itemname) {return i}
index = -1;
}
return index;
}
然后我可以使用类似的东西:
if (FindItemIndex(string itemname) < 0) { // code for item not found }
else { // code where I use the index, for example remove item at inventory[index]
或者“inventory.Where(Item => Item != null)”可用吗?我很感激一些建议
inventory.Exists(item => item?.itemname == itemname)