Словарь подклассов для использования во внешних компонентах - PullRequest
0 голосов
/ 22 мая 2018

У меня есть словарный класс, который используется для хранения данных и отслеживает сотни переменных в течение сеанса.Мне было поручено создать общую структуру, на которую я могу ссылаться на этот базовый набор функций, но позволяю вызывающим компонентам использовать разные ключи и значения в словаре.

В настоящее время этот словарь использует кортеж из 4 частей в качестве ключа и значение из 2 частей.Два компонента, к которым я привязываю, имеют разную компоновку ключей и значений.Компонент 1 - ключ состоит из пяти частей, а значение - из трех частей.Компонент 2 - Ключ представляет собой кортеж из трех частей (string, int, string) и то же значение из двух частей.

Этот класс обрабатывает передачу данных в другие компоненты, поэтому, чтобы избежать дублирования усилий, необходимо сохранитьстолько же общих функций в Common dll, а внешние компоненты будут использовать класс Survey, который отличается ключом / значением.Не уверен, что я объясняю это достаточно хорошо.Я включил текущий код ниже.Сдается мне, если основной Survey создается с объектом, объектом и подклассом внешних компонентов с правильной парой ключ / значение.

public sealed class Survey
{
    #region Private Objects
    private Survey()
    {

    }
    private Dictionary<SurveyKey, SurveyValue> survey = new Dictionary<SurveyKey, SurveyValue>();
    private int maxLines = 50000;

    private bool AllowLogging { get => (survey.Count > maxLines); }
    #endregion

    private void WriteData(SurveyKey key, SurveyValue value)
    {
        if (AllowLogging)
        {
            if (!survey.ContainsKey(key))
                survey.Add(key, value);
            else
                survey[key] = value;
        }
    }
}
#region SurveyValue Class
public sealed class SurveyValue
{
    public SurveyValue(int? value = null, string detail = null)
    {
        Detail = detail;
        Value = value;
    }

    // Uses an either/or value; Value or Detail
    public string Detail { get; private set; }
    public int? Value { get; private set; }
}
#endregion
#region SurveyKey Class
public sealed class SurveyKey : Tuple<string, string, string, string>
{
    public SurveyKey(string Signal, string SignalType, string Name, string OverallType) : base(Signal, SignalType, Name, OverallType) { }
    public string Signal { get => Item1; }
    public string SignalType { get => Item2; }
    public string Name { get => Item3; }
    public string OverallType { get => Item4; }
}

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Сделайте свой общий класс универсальным для типов K, V и используйте ключевое слово , где , чтобы ограничить словарь K и V для KBaseClass и VBaseClass.Component1 может предоставлять производные типы KBaseClass и VBaseClass и наследовать от общего или повторно использовать общие.

0 голосов
/ 22 мая 2018

Оказывается, я уже обдумал эту проблему.Все, что мне нужно сделать, это создать свой базовый словарь как Survey и использовать его во внешних компонентах.По какой-то причине я подумал, что мне нужно создать интерфейс, позволяющий подключать базовый словарь.

    private Dictionary<TKey, TValue> survey = new Dictionary<TKey, TValue>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...