访问专用词典

本文关键字:专用词 访问 | 更新日期: 2023-09-27 18:26:32

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

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

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

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

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

你是怎么做到的?

访问专用词典

它必须是完全相同的语法吗?如果你不介意访问它作为:

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; }
    }
}

索引属性是最好的选择。这应该做到:

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 
    }
}