尝试将对象添加到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";
}