Bonjour,
j'ai une question technique.
J'avais d'abord déclarer dans mon code un enum
Code :
- public enum Block
- {
- Un = 1,
- Deux = 2,
- Trois = 3,
- Quatre = 4
- }
|
Et je me suis rendu compte en le faisant que il me fallait afficher ces valeurs, et les afficher pas n'importe comment. je souhaite faire un tableau de valeur statique qui comprendrai pour chaque entrée une paire de valeur.. la valeur utile et la valeur affichable IE:
Code :
- public struct Pair
- {
- int Value;
- string Name;
- }
- Un = {1, "Un"},
- Deux = {2, "Deux"},
- Trois = {3, "Trois"},
- Quatre = {4, "Quatre"}
|
le problème, c'est que j'arrive pas a faire un enum de ce bordel
les valeurs n'ont pas vocations à être modifiées en Runtime
J'aurais souhaité y accéder facilement
Block.Un.Value
Console.WriteLine("La valeur est "+Block.Un.Name);
j'ai essayer de remplir mon enum avec des Pair, mais je ne peux pas les utiliser (normal, il ne sais pas quel est le type à l'intérieur de l'enum...)
Code :
- public struct MA_Pair
- {
- string Name;
- int Value;
- public MA_Pair(int value, string name)
- {
- Value = value;
- Name = name;
- }
- }
- public enum MA_Block
- {
- Air = new MA_Pair(0x00, "Air" )
- }
|
invalid:
MA_Block.Air.Value
Je pourrais tout mettre dans une classe, mais ca m'obligerai à l'instancier, et puis elle serait pas visible partout a moins de faire une variable globale moche. Je préférerais que ca soit accessible dans le namespace sans avoir a me soucier de l'instanciation.
je pourrais aussi faire un double tableau type
Code :
- public enum MA_Block
- { Air=0, Stone, Grass, Dirt }
- private MA_Pair[] BlockList = new MA_Pair[4];
- BlockList[MA_Block.Air] = new MA_Pair(0x01, "Air" );
- BlockList[MA_Block.Stone] = new MA_Pair(0x02, "Stone" );
- BlockList[MA_Block.Grass] = new MA_Pair(0x03, "Grass" );
- BlockList[MA_Block.Dirt ] = new MA_Pair(0x04, "Dirt " );
|
Ca oblige a faire 2 déclaration distincte, et surtout à maintenir les 2! si jamais je veux me débarraser d'une valeur au milieu, bonjour la galère
pour y acceder de la sorte:
Code :
- BlockList[MA_Block.Air].Value
- BlockList[MA_Block.Stone].Name
|
Mais c'est pas très sympa comme accesseur.
de plus, pour ma map après, ca devient super illisible
Code :
- private MA_Pair[,,] Map = new MA_Pair[_width, _height, _depth];
- for (int i = 0; i < _width; i++)
- for (int j = 0; j < _depth; j++)
- for (int k = 0; k < _height; k++)
- Map [i, j, k] = BlockList[MA_Block.Air];
|
ca devient compliquer là
bref, j'ai ptet pas la meilleure solution en tete... quelqu'un aurait une idée?