是否有可能在循环中构建和新建一个结构?

时间:2012-04-08 18:42:20

标签: c#

我想知道我怎样才能完成这个循环? 这有根 两个孩子的私人和非私人 和他们的孩子 私法:0,1,2,...,1023 和Nonpriv的孩子: 1024,...,65535

              |Any______________PORT|
                 |              |
             |Priv|          |Non-Priv|
            |||||...||||   ||||....|||||
            0123,.....1023 1024,...65535

我的意思是0在一个不同的节点中 1位于不同的节点中 2是在一个不同的节点中 这些端口有父PRIV 我区分他们的原因是,也许某一天0会有孩子的清单 它们可以在一个列表中,我们可以有一个节点列表,或者它们可以在一个字符串列表中,但我无法决定下一步有关字符串列表的操作 并且Node列表的问题在for循环中,我无法构建节点

现在我无法配置for循环如何更正我的代码?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IDS
{
    class Program
    {
        static void Main(string[] args)
        {
            Node root = new Node("Any_PORT");
            List<Node> portcat = new List<Node>();
            Node Priv = new Node("Priv");
            Node NonPriv=new Node("Non-Priv");
            root.setchildren(portcat);
            root.Thisisroot();
            root.setNodeinlist(Priv);
            root.setNodeinlist(NonPriv);
            Priv.setparent(root);
            NonPriv.setparent(root);
            List<Node> portsP = new List<Node>();
            Priv.setchildren(portsP);
            for (int i = 0; i < 1024; i++)
            {

            }
    //I tried this one but I can't fix between Nodes and list of a string        
    List<string> portsN = new List<string>();
            for (int i = 1024; i < 65535; i++)
            {
                portsN.Add(i.ToString());
            }
        }

        public class Node
        {
            public string Data;
            public List<Node> Children = new List<Node>();
            public Node parent;
            public Node(string r)
            {
                this.Data = r;
             }
            public Node Thisisroot()
            {
                this.parent = null;
                return this;
            }
            public void setchildren(List<Node> list)
            {
                this.Children = list;
            }
            public List<Node> getchildren()
            {
                return this.Children;
            }
            public void setparent(Node p)
            {
                this.parent = p;
            }
            public Node getparent()
            {
                return this.parent;
            }
            public void setNodeinlist(Node n)
            {
                this.Children.Add(n);
            }

        }
    }
}

4 个答案:

答案 0 :(得分:3)

您应该使用一个集合来保存您的对象,例如列表:

List<Node> nodes = new List<Node>();
for (int i = 0; i < 1024; i++)
{
    nodes.Add(new Node(i.ToString()));    
}

答案 1 :(得分:1)

您需要List<Node>而不是List<string>

LINQ求助:

IList<Node> nodes = Enumerable.Range(1024, 65535)
                              .Select(i => new Node(i.ToString))
                              .ToList();

答案 2 :(得分:1)

如果指定变量名称,它将保留最后一次迭代的值,并且在循环外部不可见。您需要有一个Node类型对象列表,然后在该列表中,您可以在循环

中添加类型node的实例
List<Node> nodeList = new List<Node>()

     for (int i = 0; i < 1024; i++)
                {
                nodeList.Add(new Node(i.ToString()));    
                }

答案 3 :(得分:0)

也许你的意思是像这样手动建立一个列表:

Node first;
Node lastCreated = null;
for (int i = 0; i < 1024; i++)
{
    Node n = new Node(i.ToString());
    if(i == 0)
        first = n;
    n.parent = lastCreated;
    lastCreated = n;
}

仍然需要在每个项目中添加另一个引用,如下所示:

class Node{
    public string Data;
    public Node parent;
    public Node child;
    public Node(string r)
    {
        this.Data = r;
     }
}

然后

Node first;
Node lastCreated = null;
for (int i = 0; i < 1024; i++)
{
    Node n = new Node(i.ToString());
    if(i == 0)
        first = n;
    n.Parent = lastCreated;
    if(lastCreated != null)
        lastCreated.child = n;
    lastCreated = n;
}