2015-04-01 77 views
0

我有一個類有許多相關的屬性,需要我需要運行一些簡單的計算。一般結構是:創建相關屬性的「列表」,並傳遞給方法

public class SpecialItem 
{  
    public decimal Value { get; set; } 
} 

public class Processor 
{ 
     public decimal CalcA { get; set; } 
     public decimal CalcB { get; set; } 
     public decimal CalcC { get; set; } 

     public SpecialItem ItemA { get; set; } 
     public SpecialItem ItemB { get; set; } 
     public SpecialItem ItemC { get; set; } 

     public decimal PrevCalcA { get; set; } 
     public decimal PrevCalcB { get; set; } 
     public decimal PrevCalcC { get; set; } 

     public decimal DifferenceA { get; set; } 
     public decimal DifferenceB { get; set; } 
     public decimal DifferenceC { get; set; } 

     private void Subtract() 
     {//TODO} 
} 

我需要計算DifferenceA = PrevCalcA - ItemA.Value - CALCA,然後DifferenceB = PrevCalcB - ItemB.Value - CALCB,等等。最好的辦法是,最好有一個簡單的減法器方法(例如:private void Subtract(decimal a,decimal b,decimal c),當你給它一個包含3個「list」的組時,它可以順序地計算Difference屬性其他屬性?

我之所以有這些特性是它們各自indvidually綁定到一個ViewModel。

謝謝!

+0

你的問題需要更多的解釋。你想要減去屬於哪一類?什麼叫減法,什麼觸發它被調用?當調用Subtract時,處理器的哪些屬性已被預先設置(通過綁定),Subtract的三個參數是做什麼的? – 2015-04-02 00:14:03

+0

嗨弗朗辛,減法將是處理器類本身的一部分,由嘗試刷新類屬性值的其他私有方法調用。其他屬性由私有無關的方法設置。綁定是視圖的一種方式,不允許UI更改。我想減法以某種方式使用其他屬性的值更新「差異」屬性。 – ulmelqlo 2015-04-02 00:20:12

回答

0

在我看來,這樣做最簡單的事情是重新定義DifferenceX性能如這個:

public decimal DifferenceA 
    { 
     get 
     { 
      return this.PrevCalcA - this.ItemA.Value - this.CalcA; 
     } 
    } 

    public decimal DifferenceB 
    { 
     get 
     { 
      return this.PrevCalcB - this.ItemB.Value - this.CalcB; 
     } 
    } 

    public decimal DifferenceC 
    { 
     get 
     { 
      return this.PrevCalcC - this.ItemC.Value - this.CalcC; 
     } 
    } 

或者我在你的問題中遺漏了一些東西?

+0

感謝Enigmativity。事實是我簡化了上面的例子。首先,所有屬性都實現INPC,我的理解是差異變量需要顯式地「設置」,才能觸發Property Changed事件。另一件事是數學計算遠比簡單的減法複雜得多,我避免複製和粘貼每個屬性的公式。總共有超過50個屬性被送入虛擬機。 – ulmelqlo 2015-04-02 02:22:17

+0

@ulmelqlo - 你當然**不需要**顯式設置屬性更改事件觸發的屬性。事實上,無論如何你必須手動觸發屬性改變的事件,所以這是一個跟蹤什麼屬性需要被解僱的任何財產變化的問題。在上面的代碼中,例如,如果'CalcA'發生變化,您將同時觸發「CalcA」和「DifferenceA」的已更改屬性。你可以改變它,使'DifferenceA'有一個'private set'訪問器,但是每當任何輸入值改變時,你仍然必須記得設置'DifferenceA'。 – Enigmativity 2015-04-02 02:35:23

+0

瞭解INPC!關於計算和屬性的更廣泛的觀點呢?在我的情況下,DifferenceA其實更加複雜,並且使情況變得更糟,計算的性質可能會在運行時基於用戶選擇的單選按鈕更改。只是想知道是否有通用方法(可能通過Func)在相關屬性之間進行計算使用一種方法而不是複製/粘貼所有50個屬性的相同計算。 – ulmelqlo 2015-04-02 02:45:58

相關問題