我想遍历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));
}
}
请帮帮我。
答案 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
更改为1f
。 f
告诉编译器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)