错误 - “使用未分配的参数信封”

时间:2012-11-02 12:00:31

标签: c#

我在下面的函数中收到错误“使用未分配的参数包络”

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

3 个答案:

答案 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)