如何编写高效的Getters和Setters?优化多对象三整数最值计算代码
优化Calc类代码并扩展统计功能方案
嘿,针对你的问题,我分两部分来给出解决方案:
一、优化现有代码的冗余与低效问题
你的现有代码主要存在几个冗余点:
- 手动编写私有字段和对应的属性,其实可以用C#的自动属性简化
getLargest方法需要传入三个参数,但类本身已经存储了Num1、Num2、Num3,完全没必要重复传参,既冗余又容易出错Ans字段的属性也可以简化为自动属性
优化后的代码如下:
class Calc { // 用自动属性替代手动编写的私有字段+属性,代码更简洁 public int Num1 { get; set; } public int Num2 { get; set; } public int Num3 { get; set; } public int Largest { get; private set; } // 只对外暴露get,避免外部随意修改结果 // 直接使用类内部的三个数值计算最大值,无需传参 public void GetLargest() { Largest = Math.Max(Math.Max(Num1, Num2), Num3); } }
这样优化后,调用时只需要先给Num1、Num2、Num3赋值,再调用GetLargest()就能拿到最大值,代码更简洁,也避免了参数传递的冗余。
二、不使用数组同时计算最大值、最小值和平均值
如果不能使用数组,我们依然可以通过嵌套调用Math.Max/Math.Min来计算最值,平均值则直接通过三个数的和除以3(注意用浮点数除法避免整数截断)。我们可以给类新增对应的属性来存储这些统计结果,同时把方法改个更贴切的名字,比如CalculateStats。
实现代码如下:
class Calc { public int Num1 { get; set; } public int Num2 { get; set; } public int Num3 { get; set; } // 新增统计结果属性,只允许内部赋值 public int Max { get; private set; } public int Min { get; private set; } public double Average { get; private set; } public void CalculateStats() { // 计算最大值:嵌套调用Math.Max Max = Math.Max(Math.Max(Num1, Num2), Num3); // 计算最小值:嵌套调用Math.Min Min = Math.Min(Math.Min(Num1, Num2), Num3); // 计算平均值:用3.0确保浮点数除法,避免整数截断 Average = (Num1 + Num2 + Num3) / 3.0; } }
调用示例:
var calc = new Calc(); calc.Num1 = 10; calc.Num2 = 25; calc.Num3 = 18; calc.CalculateStats(); Console.WriteLine($"最大值:{calc.Max}"); Console.WriteLine($"最小值:{calc.Min}"); Console.WriteLine($"平均值:{calc.Average:F2}"); // 保留两位小数输出
这个方案完全不需要数组,通过直接操作三个数值完成所有统计计算,代码清晰高效,同时结果通过属性暴露,调用起来非常方便。
内容的提问来源于stack exchange,提问作者battlecore64
相关产品推荐
相关产品推荐

