无法弄清楚如何返回多个计算值(3个值,2依赖于第一个)C#/ MVC

时间:2012-05-29 13:56:15

标签: c#

一直在阅读有关out / reftuple的内容,但是对于我的生活,我无法弄清楚如何实现返回三(3)个值的方法(无论是否在同一方法中)计算我的主要值,或使用单独的方法)。我可以使用一个处理服务定价的值(主要值)来执行计算。

以下是我为计算主要价值所做的工作的片段:

public class Calculations
{
    public decimal decFinancialAccount(QuoteData quoteData)
    {
        if (quoteData.StepAssetInformation.FinancialAccountDropDown
            == StepAssetInformation.FinancialAccount.None)
            return 0;
        else if (quoteData.StepAssetInformation.FinancialAccountDropDown
            == StepAssetInformation.FinancialAccount.One)
            return PriceQuote.priceFinancialAccount;
        else if (quoteData.StepAssetInformation.FinancialAccountDropDown
            == StepAssetInformation.FinancialAccount.Two)
            return (PriceQuote.priceFinancialAccount * 2);
        ...
        else
            return 0;
    }
    public decimal CalculateChapter7(QuoteData quoteData)
    {
        decimal total = PriceQuote.priceChapter7;

        ...
        total += this.decFinancialAccount(quoteData);

        return total;
    }
}

以上效果很好。它显然添加了其他decimal,但你明白了。

现在,我想对返回的CalculateChapter7值执行其他计算。

第一个值是DiscountChapter7 / discount(方法中的变量?)价格:高于一定金额,每增加50个折扣,我就没有问题。我必须(而不是让自己复杂化)。没有设定折扣的公式,我刚创建了一张Excel表格来显示我的折扣(见下文)。

第二个值是CompareChapter7 / compare(方法中的变量?)价格:对于我提供的每个折扣价格,比较同一服务的其他费用。同样,本身没有公式,我只是使用Excel工作表来任意计算这些。

另外,我想(在“折扣”和“比较”内)做一个简单的减法来显示“储蓄”(计算价格 - 折扣价格=储蓄)和“差异”(其他律师费用 - 打折)价格=差异)。我想当我得到上述两个值时,这些额外的两个值很简单。

这是我的Excel表格(只是一个小片段):

Excel sheet with pricing I want

关于这一点的几点说明:

  1. 在799和999之间没有折扣(“圆形”栏目只是为了使我的易用性与这些数字相比增加50而且不相关)。
  2. Excel公式非常简单(费用 - 折扣价格=储蓄;其他律师费用 - 折扣价格=差价) - 这正是我想在我的代码中实现的目标。
  3. 有人能提供一个如何将“折扣”和“比较”与我的计算价格相结合的可靠实例吗?

    谢谢!

2 个答案:

答案 0 :(得分:1)

我并没有真正遵循你的具体情况,但是......如果你试图从一个函数中返回3个东西,那么你做错了,你的代码将很难维护。只需定义一个具有3个属性的新类,并返回该类的实例。

答案 1 :(得分:0)

您需要创建一个包含所有返回值的新类。如果它不会在其他任何地方使用,你可以将这个类嵌套在Calculations类中,如下所示,但这取决于你:

public class Calculations
{
    public class Result
    {
        public decimal Total { get; set; }
        public decimal Discount { get; set; }
        public decimal Comparison {get; set; }
    }

    public Result CalculateChapter7(QuoteData quoteData)
    {
        Result result = new Result();
        result.Total = ...;
        result.Discount = ...;
        result.Comparison = ...;
        return result;
    }
}

当您这样做时,所有三个返回值都打包到一个对象中,然后返回。每次调用该方法时,它都会创建一个新的Result对象,并使用该方法调用的所有值填充它。因此,要在调用方法后读取返回的值,您需要从返回的对象中读取每个属性。例如,你可以这样做:

Calculations calc = new Calculations();
Calculations.Result result = calc.CalculateChapter7(...);
string output = string.Format("Total = {0}, Discount = {1}, Comparison = {2}", result.Total.ToString(), result.Discount.ToString(), result.Comparison.ToString());