我有一个像这样的cs类:
public class MyClass
{
[DefaultValue(Color.Red)]
public Color MyColor{get;set;}
}
编译器始终返回错误CS0182: 属性参数必须是属性参数类型
的常量表达式,typeof表达式或数组创建表达式我怎么了?
T_T
答案 0 :(得分:1)
使用此:
[DefaultValue ( typeof ( Color ), "255, 0, 0" )]
但这不是一种好的做法:How to set the default value of Colors in a custom control in Winforms?
答案 1 :(得分:1)
System.Drawing.Color.Red
不是常量表达式:http://msdn.microsoft.com/en-us/library/system.drawing.color.red%28v=vs.110%29.aspx
答案 2 :(得分:1)
如前所述,Color.Red
不是常量表达式。如果您打算使用PropertyGrid
之类的内容,则可以通过添加ShouldSerialize*
和Reset*
方法来实现此目的:
public class MyClass
{
public MyClass()
{
ResetMyColor();
}
public Color MyColor { get; set; }
private bool ShouldSerializeMyColor() { return MyColor != Color.Red; }
private void ResetMyColor() { MyColor = Color.Red; }
}
如果您打算使用XmlSerializer
,那么ShouldSerialize*
必须公开(Reset*
不使用XmlSerializer
):
public class MyClass
{
public MyClass()
{
MyColor = Color.Red;
}
public Color MyColor { get; set; }
public bool ShouldSerializeMyColor() { return MyColor != Color.Red; }
}
答案 3 :(得分:0)
除RGB值外,您还可以使用字符串:
[DefaultValue(typeof(Color), "Red")]
public Color MyColor{ get; set; }
答案 4 :(得分:0)
我也遇到了属性的这个问题,其中 Color
不能是可选的构造函数参数,原因在这里解释。
我已经通过使用 System.Drawing.KnownColor
解决了这个问题,它是一个 enum
:
public MyCustomAttribute(string someValue, int otherValue, KnownColor foreColor = KnownColor.Black)
{
...
SomeControl.ForeColor = Color.FromKnownColors(foreColor);
}
唯一的缺点是您只能使用已知颜色(命名颜色),但这些还包括所有系统定义的颜色,如 WindowText、ControlText 等。