访问常量键值数据的有效方法

时间:2013-01-31 21:59:10

标签: c# dictionary keyvaluepair

我想存储键值数据并能够以有效的方式访问它。

基本上:我有一个自定义对象(EquipmentObj),并且该对象中有一个名为“DeviceType”的属性。在对象的构造函数中,我传递一个字符串,该字符串出现在Dictionary(LocalObj的局部变量)中,如果Dictionary有键,则返回一个值。

为了尽量减少在堆上初始化Dictionary 25次,(EquipmentObj被实例化25-50次),我想知道是否有更有效的方法来执行此操作。

我的第一个想法是XML,但我无法添加反序列化;我不会进入这个。

我的下一个想法可能是使用静态类。但是我仍然需要定义KeyValuePair或Dictionary,静态类不能有实例成员。

你们都建议什么?

这是我现在基本上做的一个例子。

class EquipmentObj
    {
        public EquipmentObj(string deviceType)
        {
            addItems(); 
            this.DeviceType = EquipmentList.ContainsKey(device_Type) ? EquipmentList[deviceType] : "Default";
        }
        public string DeviceType { get; set; }
        private Dictionary<string, string> EquipmentList = new Dictionary<string, string>();

        private void addItems()
        {
            //Add items to Dictionary 
        }
    }

2 个答案:

答案 0 :(得分:1)

static类不能包含实例成员,但非静态类可以包含static个成员。您可以EquipmentListaddItems()同时static而不更改EquipmentObj本身。

class EquipmentObj
{
    public EquipmentObj(string deviceType)
    {
        addItems(); 
        this.DeviceType = EquipmentList.ContainsKey(device_Type) ? EquipmentList[deviceType] : "Default";
    }
    public string DeviceType { get; set; }
    private static Dictionary<string, string> EquipmentList = new Dictionary<string, string>();

    public static void addItems()
    {
        //Add items to Dictionary 
    }
}

你称之为:

EquipmentObj.addItems();

答案 1 :(得分:0)

您可以创建一个Manager类来处理设备类型,它不是必需的,但它确实分离了逻辑,并使您在应用程序中的其他区域访问设备类型更容易。

public class EquipmentObj
{
    public EquipmentObj(string deviceType)
    {
        this.DeviceType = EquipmentObjManager.GetDeviceType(deviceType);
    }
    public string DeviceType { get; set; }
}

public class EquipmentObjManager
{
    private static Dictionary<string, string> EquipmentList = new Dictionary<string, string>();

    public static string GetDeviceType(string deviceType)
    {
        return EquipmentList.ContainsKey(deviceType) ? EquipmentList[deviceType] : "Default";
    }

    public static void AddDeviceType(string deviceTypeKey, string deviceType)
    {
        if (!EquipmentList.ContainsKey(deviceTypeKey))
        {
            EquipmentList.Add(deviceTypeKey, deviceType);
        }
    }
}

我不确定你在哪里使用词典,但你可以调用EquipmentObjManager.AddDeviceType将项目添加到字典中。

对您来说可能不是最好的解决方案,但它可以提供帮助:)