下面是一个简单的类,它允许设置HighTemps
和LowTemps
。还有一个只读属性TempRange
,它的getter
中使用循环来计算。除了循环之外,还有其他更优雅的方法吗?鉴于TempRange将始终从HighTemps
和LowTemps
派生出来,并且所有这三个基本都具有7个带有索引的项目,是否有更好的方法来执行此操作而无需循环设置{{ 1}}?
TempRange
答案 0 :(得分:1)
我认为没有比循环更好的方法了。
小东西:
WeatherDay
列表中。像这样:public class WeatherDay {
public int Min;
public int Max;
public int Range => Max - Min;
}
答案 1 :(得分:0)
如果您使用Linq的toDictionary怎么办? https://www.dotnetperls.com/todictionary
public Dictionary<int, int> TempRange
{
get
{
return HighTemps.ToDictionary(k => k.Key, v => v.Value - LowTemps[v.Key]);
}
}
答案 2 :(得分:0)
这里是您问题的可能解决方案。 创建并使用一个代表工作日的对象并使用该特定日期的天气峰值(高温和低温)。另外,我们添加了一个计算差异的属性范围。创建一个列表并将所有天数添加到其中。之后,每天进行迭代并返回范围。请参阅下面的代码示例。打开VS,创建新的Console App并粘贴示例。
public class Program
{
public static void Main()
{
List<WeatherDay> weatherDays = new List<WeatherDay>();
//add day of week and temp
weatherDays.Add(new WeatherDay(1, 84, 65));
weatherDays.Add(new WeatherDay(2, 86, 66));
weatherDays.Add(new WeatherDay(3, 81, 71));
weatherDays.Add(new WeatherDay(4, 82, 60));
weatherDays.Add(new WeatherDay(5, 82, 64));
weatherDays.Add(new WeatherDay(6, 83, 69));
weatherDays.Add(new WeatherDay(7, 84, 70));
weatherDays.ForEach(wetherDay => {
Console.WriteLine("The range for Day {0} of the week was {1}", wetherDay.Day, wetherDay.Range);
});
Console.ReadLine();
}
}
public class WeatherDay
{
public int Day { get; set; }
public int HighTemp { get; set; }
public int LowTemp { get; set; }
public WeatherDay(int day, int highTemp, int lowTemp)
{
this.Day = day;
this.HighTemp = highTemp;
this.LowTemp = lowTemp;
}
public int Range { get { return HighTemp - LowTemp; } }
}
我希望这可以为您提供进一步的帮助!干杯!
答案 3 :(得分:0)
您无法避免循环的发生,但是可以通过学习一些Linq来避免对其进行编码:
public Dictionary<int,int> TempRange
{
get {
return LowTemps.ToDictionary(l => l.Key, l => HighTemps[l.Key] - l.Value);
}
}
但我同意@Zyo的所有观点。