用于外部组件的子类字典

时间:2018-05-22 19:58:05

标签: c# dictionary

我有一个字典类,用于存储数据,并在会话过程中跟踪数百个变量。 我的任务是构建一个通用框架,我可以引用这个基本功能集,但允许调用组件在字典中使用不同的键和值。

目前,该词典使用4部分元组作为键,并使用2部分值。 我所关注的两个组件具有不同的键和值布局。 组件1 - 键是一个由5部分组成的元组,值为3部分。 组件2 - Key是一个由3部分组成的元组(字符串,整数,字符串)和相同的2部分值。

此类处理向其他组件的数据传输,因此为避免重复工作,希望在Common dll中保留尽可能多的常用功能,而外部组件将使用不同键/值的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 :(得分:1)

使您的公共类具有K,V类型的通用类,并使用 where 关键字将字典K和V限制为KBaseClass和VBaseClass。 Component1可以公开KBaseClass和VBaseClass派生类型,并继承公共或重用common。

答案 1 :(得分:0)

原来,我在想这个问题。我需要做的就是创建我的基本字典作为Survey,并在我的外部组件中使用它。 出于某种原因,我认为我需要创建一个接口以允许插入基本字典。

    private Dictionary<TKey, TValue> survey = new Dictionary<TKey, TValue>();