有什么方法可以检查值是否为空
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];
目的是我想要初始化所请求的对象而不是全部。
答案 0 :(得分:2)
您无法在此设置中检查请求的密钥,因为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];
}
}
同样,如果你想确保你的字典是一个字典,你可以实现一个新的类,从字典继承,并在每次针对一个尚不存在的对象请求访问时创建对象。
答案 1 :(得分:0)
不,你不能。您现在拥有一个属性,该属性将返回整个字典对象,然后您可以使用该对象从中选择键/值。我可以在这里查看请求的密钥
一个选项是创建一个函数,它只返回你要查找的值,或者如果值为null / missing则执行某些操作。
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);
答案 2 :(得分:0)
您可以使用此辅助函数从字典中获取值,而不会遇到缺少键的异常:
public object GetValue(string key, object defaultValue = null)
{
Object val;
if (Pdict.TryGetValue(key, out val)) return val;
return defaultValue;
}
答案 3 :(得分:-1)
使用索引器代替使用普通属性:
public object this[ string key ]
{
get
{
return coll[ key ];
}
set
{
coll[ key ] = value;
}
}
答案 4 :(得分:-1)
你不能把它当作财产。您可以改用一种方法:
public Object GetDictValue(String Key)
{
if (Pdict.ContainsKey(Key))
return Pdict[Key];
Pdict.Add(Key, null);
return null;
}
然后只使用该属性来检索整个词典。