Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从嵌套的子类中获取随机值_C# - Fatal编程技术网

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

C# 从嵌套的子类中获取随机值,c#,C#,我的程序中有一个如下所示的对象: var allNode = new NodeClass() { Id = 1, Node = new NodeClass() { Id = 2, Node = new NodeClass() { Id = 3,

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

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

我想知道有没有更好的方法来实现这一点?

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

static Random rnd = new Random();
要求Random实例为您提供一个随机数,该随机数为ArrayList中项目数的最大值

int r = rnd.Next(list.Count);
显示字符串

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

除非您保留一个节点有多少链接子节点的计数器,否则我看不到更好的实现方法。但是,您不必要地向Linq订购。如果只需要一个节点,则列表中的Random.NextInt就足够了。但是,如果要“随机选择当前节点”,则可以遍历所有节点并对每个节点进行随机检查。我不确定这个解决方案会有多可靠。