【问题标题】:Selecting a random item from a list C# OOP [duplicate]从列表中选择一个随机项目 C# OOP [重复]
【发布时间】:2020-12-29 00:24:46
【问题描述】:

我有两种方法。在第一个中,我将项目添加到名为 Persons 的列表中。在第二个中,我需要从列表中选择一个随机项目 (Persons) 并从列表中返回人的姓名。

我不确定如何执行此操作。我尝试生成一个随机数和一个随机字母,但我不明白如何将它们与列表一起使用。

任何帮助将不胜感激!提前谢谢你

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();
        }

【问题讨论】:

标签: c# oop


【解决方案1】:

您可以使用 Random 类在列表大小范围内生成一个随机整数,这是一个示例:

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】:

    你要找的是:

     var person = PopulatePersons.Persons[yourRandomNumber];
    

    所以你的方法应该是这样的:

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

    【讨论】:

    • 计数 - 1 不是必需的。参数maxValue是独占的,所以不考虑:rnd.Next(0, PopulatePersons.Pesrons.Count);
    • 根据此文档docs.microsoft.com/en-us/dotnet/api/…Random.Next() 将返回一个大于或等于 0 且小于 MaxValue 的 32 位有符号整数。所以 List.Count 上的 - 1 是错误的,因为 Next() 方法已经只取小于 MaxValue 参数的值
    • 您的Random 实例应该是类级别的static,而不是本地实例。您也可以只使用return Persons[rnd.Next(Persons.Count)];
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2010-09-23
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多