Geo*_*rge 2 c# data-structures
以下是它的外观:
我从外部设备获取值,我必须存储时间戳.不知何故,我想以有效的方式存储信息,以便在处理所有内容时让我的生活更轻松.
作为一个简单的解决方案,我创建了一个存储一行的类:
public class X
{
public DateTime timestamp;
public double value1;
public double value2;
}
Run Code Online (Sandbox Code Playgroud)
然后我从这些对象中创建一个List.
你能展示一种处理这类数据的更好方法吗?
谢谢!
这对我来说似乎是完全合理的,虽然我使用属性而不是公共字段.如果从外部设备获取值,则可能需要考虑使类型为immutable - 将所有值传递给构造函数并将它们存储在只读字段中.当类型不可变时,我发现更容易推理我的代码:)
你关注什么样的效率?你有多少这些价值观?即使这里没有很多值,我可能仍然使用类而不是结构...我很少创建自己的结构.再一次,我只是发现类更容易推理(例如,不需要担心拳击.)此外,这感觉就像"一组值"而不是一个不可分割的值,这是结构通常用于(数字等) .它对我来说感觉不像是一个结构.
每个对象会产生一个开销,但除非你有充分的理由,否则我不会担心.
编辑:这似乎是一个微不足道的要点,但给出一切有意义的名字.例如:
public class DeviceReading
{
private readonly DateTime timeStamp;
public DateTime TimeStamp { get { return timeStamp; } }
private readonly double temperature;
public double Temperature { get { return temperature; } }
private readonly double airPressure;
public double AirPressure { get { return airPressure; } }
public DeviceReading (DateTime timeStamp,
double temperature,
double airPressure)
{
this.timeStamp = timeStamp;
this.temperature = temperature;
this.airPressure = airPressure;
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑你无论如何都会这样做,但我只是觉得我确定:)
还有几件需要考虑的事情:
假设您使用的是最新版本的.NET,您可能希望使用DateTimeOffset而不是DateTime.好处是DateTiemOffset明确地表示即时,而DateTime可以是UTC,本地或未指定.
根据您正在采取的读数类型(以及它们如何通信),您可能希望使用decimal而不是double.可能不是温度和气压(或任何其他"物理"值),但如果你正在处理像金钱这样的人为价值,那么decimal你的朋友.鉴于这是从设备读取,你可能正在处理物理量,但我认为值得一提.
为了处理读数集合,你真的想看看LINQ.真可爱:)