2013-10-24 16 views
5

System.Drawing.Color構造体を繰り返し処理して、ペンリストを初期化します。System.Drawing.Color構造体を繰り返し処理し、System.Drawing.Penを作成します。

私はこのようにそれを試してみましたが、フィールドの種類はフィッティングではありません。

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

@mbeckish 'Color'は多くの' static'プロパティを持つクラスであり、 'enum'ではありません。 –

答えて

5

、彼らは性質だ、ではないフィールド:

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

これは私が実行しているバージョンと141色でPen Sを生成し、0123でリストに対応している必要があります。それはTransparentを持っていますが、Emptyを返しません。また、(float)1から1fに変更しました。 fは、floatリテラルのコンパイラに、1からfloatへのキャストよりも簡潔に指示します。

+0

"透明"と "ゼロ"を削除しました。私はチェックしていないが、最初に注文が何とか異なるように選択されていることを願っている。 – user2799180

+0

注文を一貫して賢明にするには、 'GetProperties(...)OrderBy(x => x.Name)'のようなことができます。 –

1

たぶん、あなたはあなたのコードでこれを変更しようとすることができます

colorList.Add(新しいSystem.Drawing.Pen((カラー)field.GetValue(ヌル)、(フロート)1));

fieldはちょうどFieldInfoインスタンスであり、これはそれが本当に(MSDNから)は何かということです:

は、フィールドの属性を発見し、 メタデータをフィールドへのアクセスを提供します。

しかし、あなたが必要なのメタデータではないColorインスタンスを取得することで、あなたは以下のコードでそれを行うことができます:Color.Emptyを除き

(Color)field.GetValue(null) 
関連する問題