Check List<> for 'Item'

I have a class ‘Item’, and a List of ‘Items’ (Inventory). I have a vehicle I wish to require a key to activate.

I have a shop where the key is obtainable and this part works - adds the Item ‘Key’ to the Inv list. It is when I check for the item that I hit my snag:

if(Inventory._Inv.Contains (key)){
	Debug.Log("Key Accepted");

Inventory._Inv is a public static List (for testing purposes) and ‘key’ is a new Item defined at start with the same arguments as the item in the shop.

I do not get the debug message “Key Accepted” - any ideas?

I feel I’m either using Contains() wrong, or I am having a problem because ‘key’ is defined as a new Item, but I don’t know how to define it without the new keyword.


If key is a class, then by default it is compared by reference, so Contains will return true only if you pass to it the same instance that was added to the list.

To change this behaviour, you can override Equals method of Key class, or eventually use struct instead of class (if possible).