1

我在以下函数中遇到错误,即“使用未分配的参数包络”

    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;
    }
4

3 回答 3

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 参数时,需要在退出方法之前在方法体中初始化或分配该参数。

于 2012-11-02T12:03:06.430 回答
0

envelope参数是一个输出参数。这意味着它需要在例程完成之前分配给它。

您在此参数建立之前设置属性,因此出现错误消息。

如果你真的想要一个输出参数,你需要在退出之前初始化信封参数。

envelope = new Envelope();

但是,如果您想更改现有 Envelope 对象的属性,并且将该信封作为参数传入,则实际上不需要将其作为输出参数。

只需将您的方法签名更改为:-

public override bool Parse(string input, Envelope envelope)
于 2012-11-02T12:07:25.167 回答
0

如果没有参数,您可以假设它们是未指定的(未初始化),并且您需要在离开方法的上下文之前以及在使用该事物之前对其进行分配。

所以在你的情况下,如果编译器让你使用envelope你会得到一个NullReferenceException. 但这并不是说你不能分配一个out参数来null返回给调用者。

于 2012-11-02T12:03:23.247 回答