检查条件并检查三个单独的“对象”以执行计算

时间:2012-07-20 20:18:19

标签: c# razor comparison

我正在思考对你来说可能非常简单的天才。 :)

我有三种不同类型资产的单独输入,它们都有相同的四种选择:

  1. 两个
  2. 三个或更多
  3. 我分别计算用户选择的特定资产总数的成本。每个资产都会增加100美元的成本,因此我的代码就是这样:

    public static decimal priceAsset { get { return 100; } }
    

    因此,我计算了每种不同类型的资产:

    1. 用户选择none = $ 0
    2. 用户选择“一个”= priceAsset
    3. 用户选择“两个”= priceAsset * 2
    4. 用户选择“三个或更多”= priceAsset * 3(我还添加了一个注释,即每个资产超过三个,每个增加100美元)。
    5. 现在,请记住,我是针对三种不同类型的资产单独执行此操作的。这些资产是财产,车辆或“其他”资产(按此顺序)。我认为订单很重要,因为输入是线性的 - 用户从属性开始,必须在移动到车辆或“其他”之前做出选择。

      这在我的计算中可以正常运行,但现在我已经决定如果我的申请中某个单独的无关条件成立,那么我不想仅为第一个资产(任何资产类型)收取100美元。

      我的问题是我无法正确地找出比较其他两个资产中的任何一个的逻辑,以确定是否选择了一个或多个资产来确定是否收取前100美元。

      如果不清楚,请举个例子:我基本上告诉人们,第一项资产不会产生100美元的费用,但此后的每项资产都会。

      • 用户选择“一个”,“两个”或“三个或更多”的资产类型属性,第一个属性不收取费用,但是两个或更多类型属性的资产每个都要收取100美元,并且相同任何数量的资产类型车辆或“其他”。
      • 用户选择资产类型属性的“无”,但选择资产类型车辆的“一个”,“两个”或“三个或更多”,第一辆车不收费,但是两个或更多类型的资产车辆每次收取100美元的费用,以及任何数量的“其他”资产类型。
      • “其他”资产相同。
      • 所有三种资产的“无”只返回$ 0.

      以下是我如何处理财产(代码已提取)的示例:

              if One
                  {
                     priceAsset 
                  }
              else if Two
                  { 
                     priceAsset * 2
                  }
              else if ThreeOrMore
                  {                
                      priceAsset * 3
                  }
              else
                  { 
                      $0
                  }
      

      我对Vehcile和OtherAsset也这样做。

      现在,如果这只是一种类型的资产,我可以制作第一个“$ 0”并更改第二个和第三个以轻松地做到这一点,但它正在检查其他两种类型的资产我踌躇不前。我开始将所有其他资产与||进行比较,但这是11次比较,我认为有一种更简单的方法。另外我认为我必须在每个分支上做到这一点(所以11 *(3种资产类型*每个3个分支),而且,这听起来很荒谬。

      非常感谢任何指导。我希望我的描述性足够(但不要太过分析)。

1 个答案:

答案 0 :(得分:1)

你所说的是,你想为所有资产类型收取相同的(模式)费用,除非选择了一个属性和一个属性(在这种情况下你希望值为0)

假设这样的枚举:

public enum AssetType {
    Property,
    Vehicle,
    Other
}
public enum AssetCount {
    None,
    One,
    Two,
    ThreeOrMore
}

您可以使用此功能确定价格:

public static decimal GetPrice( 
        AssetType assetType, 
        AssetCount assetCount, 
        decimal unitPrice 
    ) {

        //Handle Exceptional case first
        if( assetType == AssetType.Property ) {
            if (assetCount == AssetCount.One){
                return 0;
            }
        }
        switch( assetCount ) {
            case AssetCount.None:
                return 0;
            case AssetCount.One:
                return ( unitPrice );
            case AssetCount.Two:
                return ( unitPrice * 2 );
            case AssetCount.ThreeOrMore:
                return ( unitPrice * 3);

        }
        throw new Exception( "Unsupported AssetCount" );
}