迭代System.Drawing.Color结构并使用它来创建System.Drawing.Pen

时间:2013-10-24 20:21:10

标签: c# struct

我想遍历System.Drawing.Color结构并使用它来初始化笔列表。

我试过这样,但是字段的类型不适合:

colorList = new List<System.Drawing.Pen>();

        foreach (var field in typeof(System.Drawing.Color).GetFields())
        {
            if (field.FieldType.Name == "Color" && field.Name != null)
            {
                colorList.Add(new System.Drawing.Pen(field, (float)1));
            }
        }

请帮帮我。

2 个答案:

答案 0 :(得分:6)

除了Color.Empty,它们是属性,而不是字段:

var colorList = new List<System.Drawing.Pen>();

foreach (var prop in typeof(System.Drawing.Color).GetProperties(BindingFlags.Public | BindingFlags.Static))
{
    if (prop.PropertyType == typeof(System.Drawing.Color))
    {
        colorList.Add(new System.Drawing.Pen((System.Drawing.Color)prop.GetValue(null), 1f));
    }
}

这会产生Pen个141种颜色,我正在运行的版本应该与Color Properties的列表相对应。它不会返回Empty,但它确实有Transparent。此外,我从(float)1更改为1ff告诉编译器float字面值,比将1转换为float更简洁。

答案 1 :(得分:1)

也许您可以尝试在代码中更改此内容:

colorList.Add(new System.Drawing.Pen((Color)field.GetValue(null),(float)1));

field只是一个FieldInfo实例,这就是它的真实含义(来自MSDN):

  

发现字段的属性并提供对字段的访问   元数据。

但您需要的是获取Color实例而非元数据,您可以使用以下代码执行此操作:

(Color)field.GetValue(null)