我有一个字典设置如下: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;
答案 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)
有一个解决方案,但我强烈建议不要这样做:从StringProperty
到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
代码也是如此。
答案 3 :(得分:1)
您可以为Dictionary&lt;&gt;:
实现扩展方法public static int GetRP(this Dictionary <string, ItemProperties> dict, string key)
{
return dict[key].RenderedProp;
}
你必须直接调用它,而不需要索引器符号。如果使用短名称,整体代码也同样短。