2

クラスにいくつかのプロパティとローカル変数を追加しました。XSLT を使用してオブジェクトを XML/HTML ファイルに解析したいと考えています。

ここに奇妙なことがあります:私がこれを持っているとき:

private double _invoicePrice = 0;

[XmlAttribute("invoicePrice")]
public double InvoicePrice{
    get { return _invoicePrice; }
    set { _invoicePrice = value; }
}

[XmlAttribute("vat")]
public double Vat
{
    get
    {
        return 4;

        /* // also tried this...
        double shopVat = 19;
        double vat = (_invoicePrice / (shopVat + 100)) * shopVat;
        return Math.Round(vat, 2);
        */
    }
}

解析が機能しない

そして私がこれを持っているとき:

private double _invoicePrice = 0;
private double _vat = 0;

[XmlAttribute("invoicePrice")]
public double InvoicePrice{
    get { return _invoicePrice; }
    set { _invoicePrice = value; }
}

[XmlAttribute("vat")]
public double Vat
{
    get { return _vat; }
    set { _vat = value; }
}

変換が機能します!

デバッグ中、プロパティにVatは常に値がありました。両方のオプションで。しかし、どういうわけか、XslCompiledTransformプライベート変数が必要か、読み取り専用か何かが必要ですか?

オプション2が機能し、最初のオプションが機能しない理由を誰かが説明できますか..?

4

1 に答える 1

1

簡単な答えは、セッターが必要だということです。

編集2:セッターの理由

XMLシリアル化では、プロパティを読み取り/書き込みする必要がありますか?

http://msdn.microsoft.com/en-us/library/182eeyhh%28VS.85%29.aspx

編集終了2

今のところ、試してみると:

private double _invoicePrice = 0;

[XmlAttribute("invoicePrice")]
public double InvoicePrice{
    get { return _invoicePrice; }
    set { _invoicePrice = value; }
}

[XmlAttribute("vat")]
public double Vat
{
    get
    {
        double shopVat = 19;
        double vat = (_invoicePrice / (shopVat + 100)) * shopVat;
        return Math.Round(vat, 2);
    }
    set
    {
    }
}

セッターは私が本当に変更した唯一のビットです。

値を何かに設定する必要はありませんが、getを実行してVat値を返すことができます。


提案を編集shopVATすることは、セットがで使用するためにそれを渡すことを許可することかもしれませんGET。私たち全員が知っているように、これは変わる可能性があります

private double _invoicePrice = 0;
private double _shopVat = 0;

[XmlAttribute("invoicePrice")]
public double InvoicePrice{
    get { return _invoicePrice; }
    set { _invoicePrice = value; }
}

[XmlAttribute("vat")]
public double Vat
{
    get
    {
        //double shopVat = 19;
        double vat = (_invoicePrice / (_shopVat + 100)) * _shopVat;
        return Math.Round(vat, 2);
    }
    set
    {
        _shopVat = value;
    }
}
于 2011-03-11T14:00:57.313 に答える