Определите тип, имея определенные объекты в коллекции в C # - PullRequest
3 голосов
/ 10 апреля 2011

Позвольте мне объяснить мою модель, что я собирался сделать, и что я хотел бы сделать, и узнать ваше мнение о том, как ее реализовать.

Фон

Итак, у меня есть класс TelemetryStation, в котором есть коллекция другого класса Sensor. Ну, может быть, код будет более понятным:

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

Я собирался добавить к нему свойство под названием TelemetryStationType, чтобы мы могли добавить теги к TelemetryStation, чтобы определить, какой это тип. то есть WeatherStation, Chemigation и т. д. Я бы разрешил использовать несколько тегов, если они соответствуют критериям для каждого типа TelemetryStaion.

Ну, это нормально, но я бы хотел, чтобы на WeatherStation было минимальное количество датчиков, таких как температура, скорость ветра и т. Д. Я думаю, что на моей веб-странице или странице формы окна может затем захватить все TelemetryStations определенного типа, и будет гарантировано, что они имеют правильные датчики.

Вопросы

Так что было бы лучшим способом кодировать это? Могу ли я моделировать его в классах или мне нужно просто создавать запросы, которые захватывают всю TelemetryStation с определенными типами датчиков?

Редактировать

Что-то, что я должен был добавить, что может быть важно, это то, как мы получаем данные. Итак, у нас есть прослушиватель портов, созданный другой компанией, который записывает показания телеметрической станции в текстовый файл CSV. Таким образом, файл назван в честь идентификатора станции, и каждая строка имеет метку даты и времени, за которой следуют показания через запятую. Там нет идентификации относительно того, что чтения. Поэтому я разрешаю пользователю определить модель для телеметрической станции относительно того, какие датчики поступают через прослушиватель портов и их расположение в строке в текстовом файле. Затем я анализирую текстовый файл, используя созданную пользователем модель данных. Таким образом, если компания меняет модели или порядок, в котором данные датчика находятся в текстовом файле, мы можем определить новую модель, и новый поток данных будет иметь смысл.

1 Ответ

1 голос
/ 10 апреля 2011

Как у вас есть подклассы для ваших станций, как это:

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

и в вашем базовом классе вы размышляете о свойствах

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;
        }
    }
}

Таким образом, у вас есть доступ ко всем датчикам на определенной станции, и вы можете убедиться, что у определенных типов станций есть определенный набор датчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...