将项添加到foreach循环中的列表,然后从方法返回结果

时间:2017-11-17 04:23:11

标签: c# foreach

尝试将对象添加到foreach循环中的列表时遇到了麻烦。 我已经注意到这在其他帖子中是一个有问题的方法,但是我没有看到或理解这可能是最好的方法。

我创建了endpointObject类,如下所示改编自this post。这对我来说很有意义并且按预期工作。

public class endpointObject
{
    private string isHost;
    private string FTRname;
    private string ip;
    private string port;

    public endpointObject(string isHost, string FTRname, string ip, string port)
    {
        this.isHost = isHost;
        this.FTRname = FTRname;
        this.ip = ip;
        this.port = port;
        Console.WriteLine("endpointObject instantiated");
        lib.writeToLog("endpointObject instantiated");
    }

    public string _isHost
    {
        get { return isHost; }
        set { isHost = value; }
    }

    public string _FTRname
    {
        get { return FTRname; }
        set { FTRname = value; }
    }

    public string _ip
    {
        get { return ip; }
        set { ip = value; }
    }

    public string _port
    {
        get { return port; }
        set { port = value; }
    }

}

下面是从另一个班级调用的。如前面this post中所述,无法从foreach循环中添加列表。

“您需要创建一个临时列表并在之后执行AddRange()。”

^^不确定如何抵抗这个^^

我得到以下错误,我理解可能与无法添加到foreach循环中的列表有关:

{"Object reference not set to an instance of an object."}

    public List<endpointObject> init(string configPath)
    { 
        var configDoc = new XmlDocument();
        try
        {
            configDoc.Load(configPath);
        }
        catch
        {
        //catch exception
        }
        List<endpointObject> endpointItem = new List<endpointObject>();

        foreach (XmlNode node in configDoc.DocumentElement.ChildNodes)
        {
            if (node.Name == "endpoints" && node.HasChildNodes)
            {
                Console.WriteLine("Child Nodes of endpoints: " + node.ChildNodes.Count);
                foreach (XmlNode endP in node)
                {
                    endpointItem.Add(new endpointObject(endP.Attributes["isHost"].Value, endP.Attributes["name"].Value, endP.Attributes["ip"].Value, endP.Attributes["port"].Value));
                }
            }
        }  


        return endpointItem;
    }

正如您将注意到我正在从xml迭代返回的节点。 希望有人可以帮助我理解解决这个限制的方法,或解释我应该如何区别对待。

我的目标是能够从方法中返回列表对象,并使它们可用于init方法之外的进一步操作

编辑1

当我将以下行添加到foreach循环中时,它会生成正确的输出:

Console.WriteLine(endP.Attributes["isHost"].Value + ", " + endP.Attributes["FTRname"].Value + ", " + endP.Attributes["ip"].Value + ", " + endP.Attributes["port"].Value);

我看到的输出是:

true, PC01, --, --

这正是我的预期。  是endpointItem.Add(new endpointObject(给了我悲伤,我遇到了麻烦。

编辑2

<?xml version="1.0" encoding="iso-8859-1"?>
<system>
  <configItems>
    <configItem name="streamCode" value="fgghj85678gf" configItem="0">
      <!--customer streamCode, required for authenication on server-->
    </configItem>
    <configItem name="submissionURL" value="http://example.com" configItem="1">
      <!--Data Ingest URL-->
    </configItem>
    <configItem name="reportingInterval" value="30" configItem="1">
      <!--device Name-->
    </configItem>
  </configItems>
  <endpoints>
    <endpoint isHost="true" name="PC01" ip="--" port="--" recordActive="">
      <!--endpoint record entry, isHost configures local system to report both system hostname and configured name value-->
    </endpoint>
  </endpoints>
</system>

编辑3 示例xml属性测试

              if (endP.Attributes["port"].Value != null)
                {
                    port = endP.Attributes["port"].Value;
                }
                else
                {
                    port = "NA";
                }

0 个答案:

没有答案