在Blazor WebAssembly中如何让WorkDay类调用Job类的PayRate计算税费?
解决方案:在WorkDay中使用Job的PayRate计算税费
要实现WorkDay使用Job的PayRate替代硬编码的15.74,核心是让WorkDay能关联到对应的Job实例,下面提供两种常用实现方式:
方法一:给WorkDay添加Job关联属性
适合WorkDay可能不绑定固定Job的场景,通过属性关联Job,同时处理PayRate为空的情况:
修改后的WorkDay类:
public class WorkDay { // 关联对应的Job实例,允许为空 public Job? AssociatedJob { get; set; } public double Hours { get; set; } public double? Subtotal { get; set; } public double TaxRate { get; set; } = 0.1; // 计算实际使用的时薪:若Job或PayRate为空, fallback到原硬编码值 private double EffectivePayRate => AssociatedJob?.PayRate ?? 15.74; public double Taxes { get { return (Hours * EffectivePayRate) * TaxRate; } } public double? Final { get { return (Hours * EffectivePayRate) - Taxes; } } }
使用示例:
// 创建Job实例 var devJob = new Job("Tech Corp", 22.5); // 创建WorkDay并关联Job var mondayWorkDay = new WorkDay { Hours = 8, AssociatedJob = devJob }; // 此时税费和最终薪资会用22.5作为时薪计算 var taxes = mondayWorkDay.Taxes; var finalPay = mondayWorkDay.Final;
方法二:构造函数强制注入Job
适合每个WorkDay必须属于某个Job的场景,通过构造函数传入Job,避免空关联:
修改后的WorkDay类:
public class WorkDay { private readonly Job _job; public double Hours { get; set; } public double? Subtotal { get; set; } public double TaxRate { get; set; } = 0.1; // 构造函数强制传入Job,不允许为空 public WorkDay(Job job) { _job = job ?? throw new ArgumentNullException(nameof(job), "WorkDay必须绑定一个Job实例"); } // 处理PayRate为空的情况,这里用默认值,也可根据业务抛出异常 private double EffectivePayRate => _job.PayRate ?? 15.74; public double Taxes { get { return (Hours * EffectivePayRate) * TaxRate; } } public double? Final { get { return (Hours * EffectivePayRate) - Taxes; } } }
使用示例:
var designJob = new Job("Design Studio", 19.8); var tuesdayWorkDay = new WorkDay(designJob) { Hours = 7.5 };
关键注意点
由于Job的PayRate是double?可空类型,必须处理它为null的场景:
- 示例中用
??运算符设置了默认值15.74,你也可以根据业务需求改为抛出异常(比如_job.PayRate ?? throw new InvalidOperationException("Job未设置时薪"))。
内容的提问来源于stack exchange,提问作者Yekusiel Allen
相关产品推荐
相关产品推荐

