2011-03-11 4 views
2

クラスにいくつかのプロパティとローカル変数を追加しました。オブジェクトをXSLTで解析してXML/HTMLファイルにしたいと考えています。私はこれを持っているとき :XslCompiledTransform(オブジェクトとXSLT)

は今ここに奇妙なことである

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が動作し、最初のものがなぜ動作しないのか説明できますか?

答えて

1

簡単な答えは、セッターが必要です。

EDIT 2:セッター

Does XML Serialization Require Properties to be Read/Write?

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

のEND EDIT今のところ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値を返すことができます。

EDIT
提案はセットがGETで使用することshopVATに渡すことができるようにするかもしれません。私たちは皆知っているので、これは変わる可能性があります

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

なぜセッターが必要ですか? –

+0

まだわかりませんが、まだ見つけようとしています... –

+0

セットを使用してバット値を渡すと、それは本当に重要ではありません; –