.Net设置并获取字典属性

时间:2018-10-05 20:15:21

标签: c# .net dictionary

下面是一个简单的类,它允许设置HighTempsLowTemps。还有一个只读属性TempRange,它的getter中使用循环来计算。除了循环之外,还有其他更优雅的方法吗?鉴于TempRange将始终从HighTempsLowTemps派生出来,并且所有这三个基本都具有7个带有索引的项目,是否有更好的方法来执行此操作而无需循环设置{{ 1}}?

TempRange

4 个答案:

答案 0 :(得分:1)

我认为没有比循环更好的方法了。

小东西:

  • 构造函数采用3个参数,第3个无效,将其删除。
  • 我认为您的所有数据都可以存储在一个简单的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的所有观点。