我有这个模型类BrandColors。我想从颜色填充属性HexCode和RGBCode。有没有办法做到这一点。
public class BrandColors :CSSItem
{
public Color color { get; set; }
public string RGBCode { get; set; }
public string HexCode { get; set; }
public BrandColors()
{
HexCode = color.Name.PadLeft(6, '0');
}
}
}
我有另一个模型,我将填充它
private void InitializeBrandColors()
{
BrandColors.Add(new BrandColors()
{
color = Color.FromArgb(0,0,51,0),
});
BrandColors.Add(new BrandColors()
{
color = Color.FromArgb(0,82,72,53),
});
}
在视图中,我可以访问颜色对象的属性,如
@brandcolor.color.Name.PadLeft(6, '0')<br>
RGB brandcolor.color.R,@brandcolor.color.G,@brandcolor.color.B
但我想做一些像直接访问
的事情 @brandcolor.HexCode
@brandcolor.RGBCode
答案 0 :(得分:0)
如果唯一的实际后备数据是color
属性,则将您的其他属性设为只读计算属性。像这样:
public class BrandColors :CSSItem
{
public Color color { get; set; }
public string HexCode
{
get { return color.Name.PadLeft(6, '0'); }
}
// something similar for RGBCode, however you calculate that
}
基本上你不应该尝试在多个地方复制信息。即使信息以不同方式呈现,唯一的实际信息就是Color
。其他一切都只是基于此的计算。在多个地方保持相同的信息意味着保持同步,这会迅速升级问题。
毕竟,如果在set
上调用了HexCode
,会发生什么?然后模型将处于无效状态。如果计算属性只有get
而没有set
,那么这种情况就不会发生。使用代码只能set
color
属性,其他属性会自动反映该更改。