У меня есть словарный класс, который используется для хранения данных и отслеживает сотни переменных в течение сеанса.Мне было поручено создать общую структуру, на которую я могу ссылаться на этот базовый набор функций, но позволяю вызывающим компонентам использовать разные ключи и значения в словаре.
В настоящее время этот словарь использует кортеж из 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; }
}