Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 markblank05 · Nov 24, 2015 at 12:50 PM · c#lists

List.Contains Problem

Hi, Im testing this script that I'll use in my game but I have a problem on list. I make a small script that will test my code but I don't know how to check if the list already contains this class or inputs. Here is my code

 using UnityEngine;
 using System.Collections.Generic;
  
 public class Name : MonoBehaviour
 {
     public List<NameClass> ListOfName;
  
     void Awake ()
     {
         ListOfName = new List<NameClass> ();
     }
  
     void Update ()
     {
         if (Input.GetButtonDown ("Horizontal"))
         {
             foreach (NameClass nc in ListOfName)
             {
                 Debug.Log(nc.Name);
                 Debug.Log(nc.Age);
             }
         }
  
         if (!ListOfName.Contains(new NameClass("mark", 1)))
         {
             ListOfName.Add (new NameClass("mark", 1));
         }
     }
  
 }
  
 public class NameClass
 {
     public string Name { get; set; }
     public int Age { get; set; }
  
     public NameClass (string name, int age)
     {
         Name = name;
         Age = age;
     }
 }

in update it will add new NameClass("mark", 1) if the list doesnt contains this class or same input. how can i correctly do it? 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
4

Answer by Bonfire-Boy · Nov 24, 2015 at 01:29 PM

In this...

 if (!ListOfName.Contains(new NameClass("mark", 1)))
 {
      ListOfName.Add (new NameClass("mark", 1));
 }

You create a new NameClass, and look to see if it's in the list. It can't be, because you only just created it. The point is, Contains is looking to see if that particular object is in the list, not for an object with the same values as that one.

To check if your list already contains a NameClass with certain values, you need to look at and compare those values. You could for example create a function something like this...

 bool Contains( List<NameClass> list, NameClass nameClass)
 {
    foreach (NameClass n in list)
    { 
       if (n.Name == nameClass.Name && n.Age == nameclass.Age)
        { return true; }
    }
    return false;
 }

and then

 NameClass nc = new NameClass("mark", 1);
 if (!Contains(ListOfName, nc))
 {
          ListOfName.Add (nc);
 }

There will be more clever ways of doing this but I think the main point to get across here is that testing the equality of variables of class types tests if they are the same object, not if they have the same values. The latter is something which, generally speaking, you have to implement yourself.

Comment
Add comment · 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

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

33 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 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

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Grab a specific item from a list 3 Answers

Adding object to list add the same object to another list 1 Answer

Illuminating a 3D object's edges OnMouseOver (script in c#)? 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