0

我想太多对你们天才来说可能很简单的事情。:)

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

  1. 没有任何
  2. 三个或更多

我正在单独计算用户选择的特定资产总量的成本。每项资产都会增加 100 美元的成本,因此我的代码中有它:

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

因此,对于我计算的每种单独类型的资产:

  1. 用户选择无 = $0
  2. 用户选择“一”=priceAsset
  3. 用户选择“二”=priceAsset * 2
  4. 用户选择“三个或更多”= priceAsset * 3(我还添加了一个注释,超过三个的每个资产每个增加 100 美元)。

现在,请记住,我对三种不同类型的资产分别执行此操作。这些资产是财产、车辆或“其他”资产(按此顺序)。我认为顺序很重要,因为输入是线性的——用户从属性开始,在移动到车辆或“其他”之前必须做出选择。

这在我的计算中很有效,但现在我已经决定,如果在我的应用程序中某个单独的不相关条件为真,那么我不想只为第一个资产(任何资产类型)收取 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 个),好吧,这听起来很荒谬。

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

4

1 回答 1

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" );
}
于 2012-07-20T20:51:06.370 回答