1

我有一个像这样设置的字典: Dictionary <string, ItemProperties>

ItemProperties 对象如下所示(基类是抽象的):

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

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

string value = Properties[keyname];

相对

string value = Properties[keyname].RenderedProp;
4

4 回答 4

5

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; }
    }
}
于 2013-04-09T16:33:37.697 回答
3

不,如果您想将RenderedProp值存储在字典中,只需将其设为 aDictionary<string, string>并适当添加即可。如果您确实需要ItemProperties字典中的完整内容,但经常想要获取RenderedProp,您总是可以创建一个方法来做到这一点(无论字典所在的位置)。

请注意,如果RenderedProp仅在(不在 的其他子类中)指定,那么您需要考虑字典中的非 StringProperty 值会发生什么。StringPropertyItemProperties

于 2013-04-09T16:33:56.137 回答
2

有一个解决方案,但我强烈建议不要这样做:定义一个隐式转换运算符 from StringPropertyto string,然后返回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代码也是如此。

于 2013-04-09T16:34:35.187 回答
1

你可以为你的 Dictionary<> 实现一个扩展方法:

public static int GetRP(this Dictionary <string, ItemProperties> dict, string key)
{
    return dict[key].RenderedProp;
}

不过,您必须直接调用它,而无需使用索引器表示法。如果您使用短名称,则总体代码也同样短。

于 2013-04-09T16:50:30.890 回答