在属性getter中获取字典键
本文关键字:字典 获取 属性 getter | 更新日期: 2023-09-27 18:04:43
是否可以检查value是否为null
Dictionary <string,object> coll = new Dictionary <string,object> ();
public Dictionary <string,object> Pdict
{
get
{
//can I check here which key is requested
//if(coll[keyname ] == null)coll[keyname ] = new myclass();
return coll;
}
set
{
coll = value;
}
}
// when I do this I need key name in property getter.
object obj = Pdict[key];
目的是初始化被请求的对象,而不是全部。
在此设置中无法检查请求的键,因为getter返回整个字典对象,而不一定对其进行索引。例如,可以访问字典
上的方法if(myObj.Pdict.ContainsKey(someKey))
相反,如果你想限制访问,你可以在你的类上实现Indexer并隐藏你的字典。
protected Dictionary<string, object> coll = new Dictionary<string, object>();
public object this[string key]
{
get
{
if(coll.ContainsKey(key) == false)
coll.Add(key, this.CreateObjectForDictionary(key))
return coll[key];
}
}
同样,如果你想确保你的字典是一个字典,你可以实现一个新的类,从dictionary继承,并在每次请求访问一个还不存在的对象时创建对象。
我可以在这里检查请求的是哪个键吗
不,你不能。您现在有一个属性,它将返回整个字典对象,然后使用它从中选择键/值。
一个选项是创建一个函数,它将只返回你正在寻找的值,或者在值为空/缺失时做一些事情。
Dictionary <string,object> coll = new Dictionary <string,object> ();
public object GetCollValue(string key)
{
if (!coll.ContainsKey(key))
{
//logic for "not exists"
}
var value = coll[key];
if (value == null)
{
//logic for "is null"
}
return value;
}
现在只需调用你想要的键的方法。
object obj = GetCollValue(key);
您可以使用这个辅助函数从字典中获取值,而不会因为缺少键而遇到异常:
public object GetValue(string key, object defaultValue = null)
{
Object val;
if (Pdict.TryGetValue(key, out val)) return val;
return defaultValue;
}
不能将其作为属性。您可以使用一个方法:
public Object GetDictValue(String Key)
{
if (Pdict.ContainsKey(Key))
return Pdict[Key];
Pdict.Add(Key, null);
return null;
}
然后只使用属性来检索整个Dictionary
使用索引器代替普通属性:
public object this[ string key ]
{
get
{
return coll[ key ];
}
set
{
coll[ key ] = value;
}
}