我们有一个带有公共字典的课程:
public class SomethingWithADictionary {
public Dictionary<string, Instance> Instances { get; set; }
}
目前我们直接访问此词典,如下所示:
Instance inst = a.Instances["key"];
我们希望将字典设为私有,但有一种公共方法可以使用相同的索引器语法访问字典元素。原因是,如果实例不在字典中,我们想采取一些行动而不是仅仅抛出错误。
你是怎么做到的?
答案 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
}
}