c# - 通过在 C# 中的集合中包含某些对象来定义类型

标签 c# c#-4.0

让我解释一下我的模型、我打算做什么以及我想做什么,并听取您对如何实现它的意见。

背景

所以我有一个名为 TelemetryStation 的类,它包含另一个名为 Sensor 的类的集合。好吧,也许代码会更清晰:

public class TelemetryStation
{
    IList<Sensor> Sensors { get; set; }
}

我打算向它添加一个名为 TelemetryStationType 的属性,以便我们可以向 TelemetryStation 添加标签来识别它是什么类型。即 WeatherStation、Chemigation 等。如果它符合每种类型的 TelemetryStaion 的标准,我将允许使用多个标签。

这很好,但我真正想做的是保证 WeatherStation 具有最少数量的某些传感器,如温度、风速等。我的想法是在我的网页或窗口表单页面上,我然后可以获取特定类型的所有 TelemetryStations,并且可以保证它们具有正确的传感器。

问题

那么最好的编码方式是什么?我可以在类中对其建模,还是只需要创建查询来获取所有带有特定类型传感器的 TelemetryStation?

编辑

我应该补充的一点可能很重要,那就是我们如何获取数据。所以我们有一个由另一家公司制作的端口监听器,它将遥测站读数转储到一个 csv 文本文件中。因此,该文件以站号命名,每行都有一个日期时间戳,后跟逗号分隔的读数。没有关于读数是什么的标识。因此,我允许用户根据通过端口监听器进入的传感器及其在文本文件行中的位置来定义遥测站的模型。然后我使用用户创建的数据模型解析文本文件。这样,如果公司更改模型或传感器数据在文本文件中的顺序,我们可以定义一个新模型,并且新数据流将有意义。

最佳答案

你的站有这样的子类怎么样:

class WeatherStation : TelemetryStation
{
    public Sensor Temperatur { get; set; }
    public Sensor Wind { get; set; }
}

并在您的基类中反射(reflect)属性

class TelemetryStation
{
    private List<Sensor> _Sensors = null;
    public List<Sensor> Sensors 
    {
        get 
        {
            if (_Sensors == null)
            {
               _Sensors = typeof(this).GetProperties().Where(p => p.PropertyType is Sensor).Select(p => (Sensor)p.GetValue(this, null)).ToList();
            }
            return _Sensors;
        }
    }
}

这样您就可以访问特定站点上的所有传感器,并且可以确保特定的站点类型具有一组特定的传感器。

关于c# - 通过在 C# 中的集合中包含某些对象来定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5607681/

相关文章:

c# - AutoMapper - 使用自定义类型转换器将数据表映射到类对象

c# - 用于测试 Mono 的隔离框架

c# - Registry.LocalMachine 和 RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default) 之间有什么区别

multithreading - 使用 ThreadPool.GetAvailableThreads 来限制服务执行的工作量是否可以接受?

.net - linq 查询中的 String.Format

javascript - C# 到 Javascript : What the equivalent of `new MultipartFormDataContent();`

c# - 用于规范化具有唯一 ID 的数据库以构建数字的数据库设计

c# - 查找字符串中的十六进制数,然后将其转换为十进制

asp.net - 如何使用 foreach 循环清除所有文本框?

c# - C# 中的 charCodeAt() 等价物是什么?