Sélection d'un élément aléatoire dans une liste C # OOP [duplicate]

Dec 29 2020

J'ai deux méthodes. Dans le premier, j'ajoute des éléments à une liste appelée Personnes. Dans la seconde, je dois sélectionner un élément au hasard dans la liste (Personnes) et renvoyer le nom de la personne dans la liste.

Je ne sais pas comment faire cela. J'ai essayé de générer un nombre aléatoire et une lettre aléatoire, mais je ne comprends pas comment les utiliser avec la liste.

Toute aide serait grandement appréciée! Merci d'avance

static void PopulatePersons()
        {
            Person Bill = new Person("Bill", "no", "brown", 'm');
            Person Eric = new Person("Eric", "yes", "brown", 'm');
            Person Robert = new Person("Robert", "no", "blue", 'm');
            Person George = new Person("George", "yes", "brown", 'm');
            Person Herman = new Person("Herman", "no", "green", 'm');
            Person Anita = new Person("Anita", "no", "blue", 'f');
            Person Maria = new Person("Maria", "yes", "green", 'f');
            Person Susan = new Person("Susan", "no", "brown", 'f');
            Person Claire = new Person("Claire", "yes", "brown", 'f');
            Person Anne = new Person("Anne", "no", "brown", 'f');

            Persons = new List<Person>() 
            { Bill, Eric, Robert, George, Herman, Anita, Maria, Susan, Claire, Anne };            
        }

        static Person GetRandomPerson()
        {
            PopulatePersons();
        }

Réponses

2 MestreDosMagros Dec 29 2020 at 07:40

Vous pouvez utiliser la classe Random pour générer un entier aléatoire dans la plage de la taille de votre liste, voici un exemple:

public class Program
{
    public static void Main()
    {
        var persons = PopulatePersons();
        var random = new Random();
        var randomPeople = persons.ElementAt(random.Next(0, persons.Count));
        Console.WriteLine(randomPeople.Name);
    }
    
    public static List<Person> PopulatePersons()
        {
            Person Bill = new Person("Bill");
            Person Eric = new Person("Eric");
            Person Robert = new Person("Robert");
            Person George = new Person("George");
            Person Herman = new Person("Herman");
            Person Anita = new Person("Anita");
            return new List<Person>() { Bill, Eric, Robert, George, Herman, Anita };            
        }
    
    public class Person 
    {
        public Person(string name)
        {
            Name = name;
        }
        
        public string Name {get;set;}
    }
}
2 DavidB Dec 29 2020 at 07:44

Ce que vous recherchez, c'est:

 var person = PopulatePersons.Persons[yourRandomNumber];

Donc, votre méthode devrait ressembler à ceci:

 static Person GetRandomPerson()
    {
      Random rndPerson= new Random();
      int rndNumber = rnd.Next(0, PopulatePersons.Pesrons.Count);
       return PopulatePersons.Persons[rndNumber];
    }