C# 创建相关属性的“列表”并传递给方法

C# 创建相关属性的“列表”并传递给方法,c#,C#,我有一个类,它有许多相关的属性,我需要对这些属性运行一些简单的计算。总的结构是: public class SpecialItem { public decimal Value { get; set; } } public class Processor { public decimal CalcA { get; set; } public decimal CalcB { get; set; } public decimal Ca

我有一个类,它有许多相关的属性,我需要对这些属性运行一些简单的计算。总的结构是:

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个其他属性组的列表时,它可以顺序计算差异属性

我拥有所有这些属性的原因是它们各自绑定到ViewModel


谢谢

在我看来,最简单的方法是重新定义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;
        }
    }

还是我在你的问题中遗漏了什么?

你的问题需要再解释一下。你想减法属于哪一类?什么调用减法,什么触发它被调用?当调用Subtract时,处理器的哪些属性是通过绑定预先设置的,Subtract对其三个参数做了什么?嗨,Francine,Subtract将是处理器类本身的一部分,由尝试刷新类属性值的其他私有方法调用。其他属性由私有的不相关方法设置。绑定都是视图的单向绑定,不允许更改UI。我想用减法,用其他属性的值来更新差分属性。谢谢你的神秘性。事实上,我把上面的例子过于简化了。首先,所有属性都实现了INPC,我的理解是,需要显式地为要触发的属性更改事件设置差异变量。另一件事是,数学计算远比简单的减法复杂,我避免复制和粘贴每个属性的公式。总共有50多个属性被馈送到VM。@ulmelqlo-您当然不需要显式地将属性更改事件的属性设置为激发。事实上,无论如何都必须手动触发property changed事件,因此需要跟踪任何属性更改需要触发哪些属性。例如,在上面的代码中,如果CalcA发生了更改,您将同时为CalcA和DifferenceA触发已更改的属性。您可以更改它,使DifferenceA有一个专用的集访问器,但您仍然必须记住,每当任何输入值发生更改时,都要设置DifferenceA。了解INPC!关于计算和属性的更广泛的观点是什么?在我的例子中,DifferenceA实际上更复杂,更糟糕的是,计算的性质可能会在运行时根据用户选择的单选按钮而改变。只是想知道是否有一种通用方法,可能是通过Func,只使用一种方法在相关属性之间进行计算,而不是复制/粘贴所有50个属性的相同计算。@ulmelqlo-回复某人时,不要忘记使用@符号。我会根据我的答案实现属性来进行它们自己的计算,但是您可以使用Func根据用户输入更改公式。您确实需要只管理IPNC调用,但有时您可以在每次属性更改时触发一组IPNC调用,而不必担心只触发发生更改的属性(如果有意义的话)。