Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Ibzy · Feb 02, 2014 at 10:10 PM · listcontains

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.

Thanks

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by ArkaneX · Feb 02, 2014 at 10:18 PM

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

Comment
Add comment · Show 4 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Ibzy · Feb 03, 2014 at 09:35 AM 0
Share

Passing the same instance is exactly what I would like to do - how can I do this? Thanks

avatar image ArkaneX · Feb 03, 2014 at 09:52 AM 1
Share

If the key can be bought in a shop, then it means you added it to the shop in some part of the code. I suggest creating a static dictionary of cars and matching keys (for example in a Car$$anonymous$$anager class), and for each available car add it to the dictionary with its key. And then add the keys from this dictionary to your shop.

 public static Dictionary<Car, $$anonymous$$ey> DicCarsAnd$$anonymous$$eys;
 
 void Awake()
 {
     DicCarsAnd$$anonymous$$eys = new Dictionary<Car, $$anonymous$$ey>();
     var porsche = Instantiate(PorschePrefab) as Car;
     var porsche$$anonymous$$ey = new $$anonymous$$ey(); // this has to be added to the shop as well
     DicCarsAnd$$anonymous$$eys.Add(porsche, porsche$$anonymous$$ey);
 }

and when you enter a car later, you can get the $$anonymous$$ey instance from this dictionary, and test if you have it in the inventory:

 var key = Car$$anonymous$$anager.DicCarsAnd$$anonymous$$eys[car];
 if(Inventory._Inv.Contains (key))
 {
     Debug.Log("$$anonymous$$ey Accepted");
 }
avatar image Ibzy · Feb 03, 2014 at 10:05 AM 0
Share

Thats perfect, thanks! I'll give that a go when I get home and tick as answered if (when) it works.

avatar image Ibzy · Feb 03, 2014 at 09:46 PM 0
Share

Job done - thanks again Arkanex ;)

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

19 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

A node in a childnode? 1 Answer

How to search a certain variable in a list of a created class (C#) 1 Answer

How to determine if your List has more than 1 of the same object listed? 1 Answer

List.Contains problem 1 Answer

Checking duplicate position in a list 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges