3

我有一个带有“BlockType”枚举的图形程序。根据州的不同,这可能是以下几种情况之一:木头、石头、草等。

最初,对于每种可能性都必须进行各种纹理操作,但由于一些重构,枚举仅用作整数,并且不再需要 switch 语句。IE:

BlockType someFoo = someObj.blockType;

Texture usedTexture = textureLookupArray[(int) someFoo];

但作为一个副作用,枚举字符串是完全多余的!我可以将“石头”纹理放在位置 5,即使 BlockType 5 被定义为“地毯”、“砾石”或“JQuery”!

我的第一个想法是简单地重写 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 回答