kalyani
kalyani

Reputation: 1

adding class objects to list in c#

I have a class called message and I am trying to generate multiple objects for this class and store those values in a list but my list is having same elements in the end. Here is my code.

 public class Message
    {
        public int id { get; set; }
        public string Data { get; set; }
        public List<String> _messageCategories { get; set; }
        public List<double> _relevanceScore { get; set; }
        public Message(List<String> messageCategories, List<double> relevanceScore)
        {
           _messageCategories = messageCategories;
           _relevanceScore = relevanceScore;
        }
    }  
public List<Message> message=new List<Message>();
 public void Randommesg()
        {

            k1 = 10;
            for (int i = 0; i <= k1; i++)
            {
                List<double> rscore = new List<double>();
                List<string> messagetype = new List<string>();
                Message msg = new Message(messagetype, rscore);
                messagetype.Clear();
                rscore.Clear();
                Random r = new Random();
                int mnum = r.Next(6);
                while (messagetype.Count <= mnum)
                {
                    Random r1 = new Random();
                    string[] arr = { "sports", "reebok", "nike", "adidas", "cookware", "home decor", "tools", "toys", "clothes", "appliances", "electronics", "phones", "computers" };
                    int i1 = r.Next(13);
                    String mesgtype = arr[i1];
                    if (messagetype.Contains(mesgtype))
                    {
                        continue;
                    }
                    else
                    {
                        messagetype.Add(mesgtype);
                    }
                }
                while (rscore.Count <= messagetype.Count)
                {
                    Random r1 = new Random();
                    Double i2 = r1.NextDouble();
                    String score1 = i2.ToString("0.#");
                    Double score2 = double.Parse(score1);
                    rscore.Add(score2);
                }
               msg._messageCategories = messagetype;
               msg._relevanceScore = rscore;
                msg.id = i;
               message.Add(msg);
            }
        }

I am expecting 10 different messages in the message list but I ended up have same messages in the message list.Can anyone help me finding where the problem is. Thank you in advance

Upvotes: 0

Views: 308

Answers (1)

v1rusw0rm
v1rusw0rm

Reputation: 127

You shouldn't create new instance of Random every time before calling Next or NextDouble methods. Change your Randommesg to something like this:

public void Randommesg()
{
    Random r = new Random();
    int k1 = 10;
    for (int i = 0; i <= k1; i++)
    {

        List<double> rscore = new List<double>();
        List<string> messagetype = new List<string>();
        Message msg = new Message(messagetype, rscore);
        messagetype.Clear();
        rscore.Clear();
        int mnum = r.Next(6);
        while (messagetype.Count <= mnum)
        {
            string[] arr = { "sports", "reebok", "nike", "adidas", "cookware", "home decor", "tools", "toys", "clothes", "appliances", "electronics", "phones", "computers" };
            int i1 = r.Next(13);
            String mesgtype = arr[i1];
            if (messagetype.Contains(mesgtype))
            {
                continue;
            }
            else
            {
                messagetype.Add(mesgtype);
            }
        }
        while (rscore.Count <= messagetype.Count)
        {
            Double i2 = r.NextDouble();
            String score1 = i2.ToString("0.#");
            Double score2 = double.Parse(score1);
            rscore.Add(score2);
        }
        msg._messageCategories = messagetype;
        msg._relevanceScore = rscore;
        msg.id = i;
        message.Add(msg);
    }
}

Upvotes: 1

Related Questions