我有一个类,用于存储从系统读取的数据的样本。在该类中有一个属性,用于存储该示例的日期和时间:
public class ReadingValue
{
public DateTime DateTimeOfReading { get; set; }
public float Reading { get; set; }
}我需要根据ReadingValue属性对DateTimeOfReading列表进行排序。
这就是我想出来的:
public IEnumerable<ReadingValue> Hourly(IList<ReadingValue> readings)
{
var sortedReadings = readings.OrderBy(x => x.DateTimeOfReading.TimeOfDay)
.OrderBy(x => x.DateTimeOfReading.Date)
.OrderBy(x => x.DateTimeOfReading.Year);
return sortedReadings;
}代码似乎有效,当我传入ReadingValue's的列表时,它会按顺序返回列表。有什么我忽略的或者应该做的事情不一样吗?我知道时间和日期编程可能是一个棘手的话题,比如时区、日光节约等,但我不认为对日期和时间进行排序不应该涉及这些问题。
发布于 2015-11-28 16:25:14
您应该先执行OrderBy,然后执行ThenBy,而不是执行另一个OrderBy。您目前正在做的是,您正在重新排序后的第一个OrderBy的一切。
public IEnumerable<ReadingValue> Hourly(IList<ReadingValue> readings)
{
var sortedReadings = readings.OrderBy(x => x.DateTimeOfReading.TimeOfDay)
.ThenBy(x => x.DateTimeOfReading.Date)
.ThenBy(x => x.DateTimeOfReading.Year);
return sortedReadings;
}发布于 2015-11-30 10:33:15
你可以这样简化-
public IEnumerable<ReadingValue> Hourly(IEnumerable<ReadingValue> readings)
{
return readings.OrderBy(x => x.DateTimeOfReading);
}为什么这种方法叫每小时一次?也许OrderReadings会更合适。
发布于 2015-11-30 08:25:45
除了我想要补充的@PankajGupta答案之外,最好使用IEnumerable<ReadingValue>而不是IList<ReadingValue>作为方法参数类型。
通过这种方式,您不仅可以传递IList<>,还可以将任何实现IEnumerable<ReadingValue>的数组ReadingValue[]、ICollection<ReadingValue>或任何对象传递给该方法。
因为方法名应该由动词或动词短语组成,所以您应该考虑将方法名从Hourly改为SortHourly()。
请参阅:网络命名指南
https://codereview.stackexchange.com/questions/112142
复制相似问题