我在下面的函数中收到错误“使用未分配的参数包络”
public override bool Parse(string input, out Envelope envelope)
{
XmlDocument doc = new XmlDocument();
//Load XML from the file into XmlDocument object
doc.LoadXml(input);
XmlNode root = doc.DocumentElement;
XmlNode MsgEnvroot = doc.DocumentElement.SelectSingleNode("MsgEnvelope");
XmlNode MsgBodyroot = doc.DocumentElement.SelectSingleNode("MsgBody");
XmlNodeList nodeList = root.SelectNodes("MsgEnvelope");
foreach (XmlNode node in nodeList)
{
envelope.Priority = node["Priority"].InnerText;
envelope.RecipientPIMA = node["RecipientPimaAddress"].InnerText;
envelope.SenderPIMA = node["SenderPimaAddress"].InnerText;
envelope.EnvelopeDateTime = node["GMT"].InnerText;
}
envelope.MsgEnvString = MsgEnvroot.InnerText;
envelope.MsgBodyString = MsgBodyroot.InnerText;
return true;
}
答案 0 :(得分:1)
您应该在方法中初始化envelope
。
喜欢
public override bool Parse(string input, out Envelope envelope)
{
XmlDocument doc = new XmlDocument();
//Load XML from the file into XmlDocument object
doc.LoadXml(input);
envelope = new Envelope ();
XmlNode root = doc.DocumentElement;
XmlNode MsgEnvroot = doc.DocumentElement.SelectSingleNode("MsgEnvelope");
XmlNode MsgBodyroot = doc.DocumentElement.SelectSingleNode("MsgBody");
XmlNodeList nodeList = root.SelectNodes("MsgEnvelope");
foreach (XmlNode node in nodeList)
{
envelope.Priority = node["Priority"].InnerText;
envelope.RecipientPIMA = node["RecipientPimaAddress"].InnerText;
envelope.SenderPIMA = node["SenderPimaAddress"].InnerText;
envelope.EnvelopeDateTime = node["GMT"].InnerText;
}
envelope.MsgEnvString = MsgEnvroot.InnerText;
envelope.MsgBodyString = MsgBodyroot.InnerText;
return true;
}
当我们使用任何out参数时,需要在退出方法之前在方法体中初始化或分配该参数。
答案 1 :(得分:0)
使用out parameters,您可以假设它们未指定(未初始化),并且您需要在离开方法的上下文之前以及在使用该事物之前分配它。
因此,在您的情况下,如果编译器允许您使用envelope
,那么您将获得NullReferenceException
。但这并不是说您无法将out
参数指定为null
以返回给调用者。
答案 2 :(得分:0)
envelope
参数是输出参数。这意味着需要在例程完成之前将其分配。
您在此参数建立之前设置属性,因此出现错误消息。
如果确实想要输出参数,则需要在退出前初始化包络参数。
envelope = new Envelope();
但是,如果要更改现有Envelope对象的属性,并且将该包络作为参数传递,则实际上并不需要它作为输出参数。
只需将您的方法签名更改为: -
public override bool Parse(string input, Envelope envelope)