字典中对象的默认值

时间:2013-04-09 16:32:06

标签: c# .net dictionary

我有一个字典设置如下:Dictionary <string, ItemProperties>

ItemProperties对象看起来像这样(基类是抽象的):

public class StringProperty : ItemProperty
{
    public string RawProp { get; set; }
    public string RenderedProp { get; set; }
}

有没有办法像这样获取RenderedProp值(假设字典变量名为Properties):

string value = Properties[keyname];

string value = Properties[keyname].RenderedProp;

4 个答案:

答案 0 :(得分:5)

您可以使用自定义的Indexer方法创建自己的PropertyDictionary

public class PropertyDictionary
{
    Dictionary <string, StringProperty> dictionary;

    public PropertyDictionary()
    {
        dictionary = new Dictionary <string, StringProperty>();
    }

    // Indexer; returns RenderedProp instead of Value
    public string this[string key]
    {
        get { return dictionary[key].RenderedProp; }
        set { dictionary[key].RenderedProp = value; }
    }
}

答案 1 :(得分:3)

没有。如果要将RenderedProp值存储在字典中,只需将其设为Dictionary<string, string>并适当添加即可。如果你实际上需要字典中的完整ItemProperties,但经常想要进入RenderedProp,你总是可以创建一种方法来做到这一点(字典生活的地方) )。

请注意,如果RenderedProp仅在StringProperty中指定 ,而不是ItemProperties的其他子类中的,那么您需要考虑非字典中的StringProperty值。

答案 2 :(得分:2)

有一个解决方案,但我强烈建议不要这样做:从StringPropertystring定义一个隐式转换运算符,并将RenderedProp返回给调用者:

public class StringProperty : ItemProperty
{
    public string RawProp { get; set; }
    public string RenderedProp { get; set; }
    public static implicit operator string(StringProperty p)
    {
        return p.RenderedProp;
    }
}

Dictionary需要使用StringProperty,而不是ItemProperty作为值类型,以便运营商申请。您的Properties[keyname].RenderedProp代码也是如此。

答案 3 :(得分:1)

您可以为Dictionary&lt;&gt;:

实现扩展方法
public static int GetRP(this Dictionary <string, ItemProperties> dict, string key)
{
    return dict[key].RenderedProp;
}

你必须直接调用它,而不需要索引器符号。如果使用短名称,整体代码也同样短。