1

たとえば、アイテムの数に基づいて割引を提供するプログラムを作成したいとします。0 ~ 5 個の商品を購入した場合、割引は適用されません。5 ~ 10 個のアイテムを購入すると 5% の割引が適用され、10 ~ 20 個のアイテムを購入すると 10% の割引が適用されます。多くの「If」ステートメントの代わりに配列を使用してこれを整理するにはどうすればよいですか?

4

2 に答える 2

2

境界と割引を格納する構造から始めてみてはどうでしょうか。

public struct DiscountSpec
{
   public int MinItems{get;set;}
   public int MaxItems{get;set;}
   public double Discount{get;set;}
}

配列に入れます

DiscountSpec[] discounts = new DiscountSpec[]
{
   new DiscountSpec(){MinItems=0,MaxItems=5,Discount=0},
   new DiscountSpec(){MinItems=5,MaxItems=10,Discount=0.05},
   new DiscountSpec(){MinItems=10,MaxItems=20,Discount=0.10},
}

それから魔法

int numItemsPurchased=7;
var discount = discounts.Where(
      d => d.MinItems<numItemsPurchased && d.MaxItems>=numItemsPurchased)
                        .Select(d => d.Discount)
                        .FirstOrDefault();

現在、(割引なし) または(5% 割引) または(10% 割引)のdiscountいずれかが含まれます。これは、必要に応じて他の割引ブラケットで拡張できます。00.050.1

実際の例: http://rextester.com/YDOWS85239

于 2013-04-04T08:08:33.960 に答える