0

私のアイデアは、いくつかの色を切り替えることだったので、複数のペンを使用する必要はありませんが、宣言できるのは 1 つだけです。

列挙型がどのように機能するかを正確に理解しているかどうかはわかりません。修正してください:

type ColorType =
  | Red = Color.Red
  | Green = Color.Green
  | Blue = Color.Blue

そして、私はそれを使用したい:

let p = new Pen(ColorType.[index])
g.DrawRectangle(p, 0, 0, 10, 10)

ここで、index は int 変数 (0 から 2) で、色を切り替えるために使用します。問題は、その列挙型を宣言できないことです。Color は受け入れられません。可能な解決策?

4

2 に答える 2

5

インデックスで色にアクセスするには、それらを配列に入れることができます。

let colors =
  [|
    Color.Red
    Color.Green
    Color.Blue
  |]

let p = new Pen(colors.[index])
g.DrawRectangle(p, 0, 0, 10, 10)
于 2012-06-11T22:12:38.570 に答える
5

色を保存するために、おそらく配列または他のコレクションを使用する必要があります。

let colors = 
  [| Color.Red 
     Color.Green 
     Color.Blue |]

let p = new Pen(colors.[index]) 
g.DrawRectangle(p, 0, 0, 10, 10) 

列挙型は、まったく異なる目的のために設計されています。これらは、多数のオプションを列挙して名前でアクセスする場合に便利です (つまり、インデックスでアクセスするのではなく)。列挙型を使用して、たとえば、一部のステート マシンの状態やその他のオプションを表すことができます。

あなたの例では、異なる色を異なる種類のグラフィック要素に関連付けたい場合に役立ちます。背景に 1 つの色を使用し、前景に別の色を使用したいとします。列挙型または F# 識別共用体を定義して、2 つのケースを表すことができます。

type ColorType = 
  | Foreground
  | Background

...そして、個々のタイプに実際の色を割り当てるコレクションを定義できます。

let colors = 
  dict [ (ColorType.Foreground, Color.Red);
         (ColorType.Background, Color.Black) ]

次にcolors.[ColorType.Foreground]、指定した種類の色 (この場合は赤) を取得するために使用できます。ただし、列挙型 (または F# の判別共用体) のケースにインデックスでアクセスすることはできません。

これは F# の非常に基本的な側面であるため、F# WikiBookを調べたり、MSDN で紹介を読んだり、F# に関する書籍を購入したりすることをお勧めします。

于 2012-06-11T22:13:35.097 に答える