c# - 有没有办法缩短这么长的 if/else if return 方法?

标签 c#

我有这个很长的方法:

public decimal decDiscount(QuoteData quoteData)
    {
        if (TotalChapter7(quoteData) >= 7499)
            return 5300;
        else if (TotalChapter7(quoteData) >= 7449)
            return 5300;
        else if (TotalChapter7(quoteData) >= 7399)
            return 5250;
        else if (TotalChapter7(quoteData) >= 7349)
            return 5200;
        else if (TotalChapter7(quoteData) >= 7299)
            return 5200;
        else if (TotalChapter7(quoteData) >= 7249)
            return 5150;
        else if (TotalChapter7(quoteData) >= 7199)
            return 5100;
        else if (TotalChapter7(quoteData) >= 7149)
            return 5100;
        else if (TotalChapter7(quoteData) >= 7099)
            return 5050;
            //...
        else if (TotalChapter7(quoteData) >= 1199)
            return 1100;
        else if (TotalChapter7(quoteData) >= 1149)
            return 1100;
        else if (TotalChapter7(quoteData) >= 1099)
            return 1050;
        else if (TotalChapter7(quoteData) >= 1049)
            return 1000;
        else
            return 0;
    }

它有一个重复出现的模式,可以用下面的 Excel 表格来说明:

Excel sheet part 1 ……>>>> Excel sheet part 2

从最高的“费用”(7499) 开始,每份报表的费用下降 50。但是,每 100 的返回(或“折扣价”)保持不变(两次 50 的费用下降),然后一次返回(一次 50 的费用下降)本身下降 50,然后重复。

如您所见,我的方法很长(我遗漏了 7049 到 1249 之间的部分)。我可以做些什么来缩短这个时间吗?

谢谢。

最佳答案

你们真的把这个复杂化了。任何尝试使用整数运算来解决这个问题的方法都是一个坏主意。看看对于一群非常聪明的人(我们都很聪明,不是吗?)来说,即使一开始就把它做对也是多么困难。它真的很难发现,很难理解,很难正确,而且很难维护。

您需要一种易于理解且易于维护的方法。查看您的原始帖子,您对规则有英文说明。

However, the return (or "Discounted Price") stays the same for each 100 (two 50 drops in Fee), then drops 50 itself for one return (one 50 drop in Fee), and then repeats.

代码实际上是自己写的:

public int GetFeeFromQuoteData(QuoteData quoteData) {
    int fee = 5300;
    int difference = 7449 - TotalChapter7(quoteData);
    bool isTwoStep = true;

    while (difference > 0) {
        if (isTwoStep) {
            difference -= 50;
        }
        else {
            difference -= 100;
        }
        fee -= 50;
        isTwoStep = !isTwoStep;
    }
    return fee;
}

关于c# - 有没有办法缩短这么长的 if/else if return 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802613/

相关文章:

c# - 在不分组的情况下使用 Metro 风格的 GridView

c# - MySql 与 asp.net 有错误

c# - 无法单击或选择控件 XAML 设计

c# - ServiceStack.Server:与ServiceStack库集成的Redis服务器?

c# - 比较 byte[] 和 T

c# - 如何使用 MathDotNet 库应用零相位滤波器?

c# - Visual Studio 2017 中的 ExtensionManager 为空

C# 在不知道它是子类实例的情况下调用重写的子类方法

C# 代码隐藏 excel 文档中的工具栏

c# - 如何向标签添加加减号