访问私人词典

时间:2012-03-04 12:05:39

标签: c#

我们有一个带有公共字典的课程:

public class SomethingWithADictionary {
    public Dictionary<string, Instance> Instances { get; set; } 
}

目前我们直接访问此词典,如下所示:

Instance inst = a.Instances["key"];

我们希望将字典设为私有,但有一种公共方法可以使用相同的索引器语法访问字典元素。原因是,如果实例不在字典中,我们想采取一些行动而不是仅仅抛出错误。

你是怎么做到的?

2 个答案:

答案 0 :(得分:3)

是否必须完全相同的语法?如果您不介意访问它:

Instance inst = a["key"];

然后很容易 - 你只需添加一个索引器:

public class SomethingWithADictionary {
    private Dictionary<string, Instance> instances = 
        new Dictionary<string, Instance>();

    public Instance this[string key]
    {
        get
        {
            Instance instance;
            if (!instances.TryGetValue(key, out instance))
            {
                // Custom logic here
            }
            return instance;
        }
        // You may not even want this...
        set { instances[key] = value; }
    }
}

答案 1 :(得分:0)

Indexed property是要走的路。 这应该这样做:

public class SomethingWithADictionary {
    private Dictionary<string, Instance> Instances { get; set; } 
    [System.Runtime.CompilerServices.IndexerNameAttribute("Instances")]
    public  Instance this [String skillId]{
      // Add getters and setters to manipulate Instances dictionary 
    }
}