c# - Color.Red 不能作为属性中的参数

标签 c# colors attributes

我有一个像这样的CS类(class):

public class MyClass
{
    [DefaultValue(Color.Red)]
    public Color MyColor{get;set;}
}

编译器总是返回错误CS0182: 属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式

我这是怎么了?

T_T

最佳答案

正如已经指出的,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* 必须是公共(public)的(Reset* 不被 使用XmlSerializer):

public class MyClass
{
    public MyClass()
    {
        MyColor = Color.Red;
    }
    public Color MyColor { get; set; }

    public bool ShouldSerializeMyColor() {  return MyColor != Color.Red; }
}

关于c# - Color.Red 不能作为属性中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20214440/

相关文章:

c# - 使用 .NET 2.0 删除 List<T> 中的重复项

bash - 可以通过 shell 重定向捕获彩色输出吗?

html - 混合变换原始 Bootstrap 颜色以获得已知颜色

javascript - jQuery 中如何获取元素的具体值

javascript - 如何使用jquery获取元素的title属性并将其插入到元素后面?

Python 属性错误 : 'str' object has no attribute 'DataFrame'

c# - POLYGON 180-90 具有对映点异常(exception)的边

c# - 无法将类型 System.Collections.ObjectModel.ObservableCollection<> 隐式转换为 System.Collections.Generic.List<>

c# - 从 SQL Server Express 升级

r - 更改 ggplot2 中闪避条形图的颜色