You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中计算Proto消息Affordability的总支出与剩余金额

在C#中计算Proto消息的剩余金额

首先,确保你已经通过Proto编译器将.proto文件生成了对应的C#类,生成的Affordability类会包含你定义的所有decimal类型属性。

直接计算实现

如果只是单次计算需求,直接对实例属性做加减运算即可:

// 假设已获取到Affordability实例
var affordability = new Affordability
{
    Salary = 8000.00m,
    Accomodation = 2500.00m,
    PhoneBill = 300.00m,
    Utilities = 800.00m
};

// 计算总支出
decimal totalExpenses = affordability.Accomodation + affordability.PhoneBill + affordability.Utilities;
// 计算剩余金额
decimal amountLeft = affordability.Salary - totalExpenses;

// 输出结果
Console.WriteLine($"总支出:{totalExpenses:C},剩余金额:{amountLeft:C}");

扩展方法实现(推荐复用场景)

如果需要在多处复用计算逻辑,给Affordability类写扩展方法会让代码更简洁易维护:

public static class AffordabilityExtensions
{
    /// <summary>
    /// 计算总支出(accomodation + phone_bill + utilities)
    /// </summary>
    public static decimal GetTotalExpenses(this Affordability affordability)
    {
        return affordability.Accomodation + affordability.PhoneBill + affordability.Utilities;
    }

    /// <summary>
    /// 计算剩余金额(salary - 总支出)
    /// </summary>
    public static decimal GetAmountLeft(this Affordability affordability)
    {
        return affordability.Salary - affordability.GetTotalExpenses();
    }
}

调用扩展方法的示例:

var affordability = new Affordability
{
    Salary = 8000.00m,
    Accomodation = 2500.00m,
    PhoneBill = 300.00m,
    Utilities = 800.00m
};

decimal totalExpenses = affordability.GetTotalExpenses();
decimal amountLeft = affordability.GetAmountLeft();

Console.WriteLine($"总支出:{totalExpenses:C},剩余金额:{amountLeft:C}");

注意事项

  • 核对编译后的属性名:Proto中下划线命名(如phone_bill)默认会被编译为帕斯卡命名(如PhoneBill),请以实际生成的C#类属性名为准。
  • 处理默认值:如果属性未赋值,decimal类型默认值为0,上述逻辑依然有效;若需处理特殊场景(如薪资为0的提示),可在方法中添加额外判断。

内容的提问来源于stack exchange,提问作者Chief_Muna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:35:27