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 に答える