6

我想遍历 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));
            }
        }

请帮帮我。

4

2 回答 2

7

除了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));
    }
}

这会产生Pens 与我正在运行的版本的 141 种颜色,应该对应于Color Properties中的列表。它不会返回Empty,尽管它确实有Transparent。另外,我从 更改(float)11ff告诉编译器这是一个文字float,比转换1为更简洁float

于 2013-10-24T20:32:59.030 回答
1

也许你可以尝试在你的代码中改变它:

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

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

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

但是您需要的是获取Colors实例而不是元数据,您可以使用以下代码来做到这一点:

(Color)field.GetValue(null)
于 2013-10-24T20:31:52.253 回答