猿问

用于外部组件的子类化字典

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


目前,该字典使用 4 部分元组作为键和 2 部分值。我要绑定的两个组件具有不同的键和值布局。组件 1 - 键是一个由 5 部分组成的元组,值是一个由 3 部分组成的元组。组件 2 - 键是一个由 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; }

}


GCT1015
浏览 95回答 2
2回答

holdtom

使您的通用类成为 K、V 类型的泛型,并使用where关键字将字典 K 和 V 限制为 KBaseClass 和 VBaseClass。Component1 可以公开 KBaseClass 和 VBaseClass 派生类型,并从 common 继承或重用 common。
随时随地看视频慕课网APP
我要回答