在属性getter中获取字典键

时间:2014-05-22 16:03:27

标签: c#

有什么方法可以检查值是否为空

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

目的是我想要初始化所请求的对象而不是全部。

5 个答案:

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

然后只使用该属性来检索整个词典。