从嵌套的子类中获取随机值

时间:2018-12-14 10:18:09

标签: c#

我的程序中有一个如下所示的对象:

var allNode = new NodeClass()
        {
            Id = 1,
            Node = new NodeClass()
            {
                Id = 2,
                Node = new NodeClass()
                {
                    Id = 3,
                    Node = new NodeClass()
                    {
                        Id = 4,
                        Node = new NodeClass()
                        {
                            Id = 5,
                            Node =  new NodeClass()
                            {
                                Id = 6
                            }
                        }
                    }
                }
            }
        };

现在,我想获得一个随机的子对象并访问Id值。 我想出的是这个:

        var listOfNodes = new List<NodeClass>()
        {
            allNode,
        };

        var lastNode = allNode;

        while (true)
        {
            lastNode = lastNode.Node;
            if (lastNode != null)
            {
                listOfNodes.Add(lastNode);
            }
            else
            {
                break;
            }
        }

        Console.WriteLine("Random Node: ");
        Console.WriteLine(listOfNodes.OrderBy(x=> Guid.NewGuid()).First().Id);

我想知道还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

在某处创建Random类的实例。请注意,每次需要随机数时都不要创建新实例,这一点非常重要。您应该重用旧实例以实现生成数字的一致性。您可以在某个地方有一个静态字段(请注意线程安全性问题

static Random rnd = new Random();

询问Random实例可为您提供一个随机数,其中包含ArrayList中项目的最大数量

int r = rnd.Next(list.Count);

显示字符串

MessageBox.Show((string)list[r]);