3

「BlockType」列挙型のグラフィックス プログラムがあります。状態に応じて、木材、石、草などのいずれかになります。

元々、可能性ごとに実行する必要のあるさまざまなテクスチャ操作がありましたが、いくつかのリファクタリングのおかげで、列挙型は整数としてのみ使用され、switch ステートメントには不要になりました。すなわち:

BlockType someFoo = someObj.blockType;

Texture usedTexture = textureLookupArray[(int) someFoo];

しかし、これの副作用として、Enum 文字列は完全に冗長です! BlockType 5 が「Carpet」、「Gravel」、または「JQuery」として定義されている場合でも、「Stone」テクスチャを位置 5 に配置できます。

最初に考えたのは、単純に BlockType を書き直して「Material1、Material2 など」を定義することでした。ハードコーディングされた (そして潜在的に競合する!) 値の代わりに、しかしそれは実際に有用な目的を果たしますか?

BlockType を列挙型として保持することで見落としている利点があるのでしょうか、それとも混乱を減らすために通常の Int に切り替える必要がありますか?

4

1 に答える 1

7

辞書の方がはるかに優れているのに、なぜ配列を使用するのでしょうか?

private Dictionary<BlockType, Texture> _textures = 
    new Dictionary<BlockType, Texture>
    { 
        { BlockType.Wood, new WoodTexture() }, 
        { BlockType.Metal, new MetalTexture() }, 
        //etc
    }

はるかにエレガントに使用できます

var tex = _textures[someObj.blockType];
于 2013-09-22T21:43:20.907 に答える