Есть еще несколько типов, и у них есть свои уникальные целочисленные значения ... Какой самый простой способ обработки этих данных?
Что вы описываете, так этоизвестный как магические числа .т. е. всякий раз, когда ваш код должен иметь дело с произвольными почти случайными числами, и неясно, что они означают.
Лучший способ справиться с ними - определить их как константы один раз с комментариями, а затем использовать константы в коде вместо повторения "уродливых" чиселпо всей базе кода.
Возможно, что-то вроде:
public static class TextureConstants
{
// TODO comments
public static int Diffuse = -2147483647;
public static int SemiTransparent = -2147483643;
public static int Masked= -2147483629;
}
Кроме того, это не причина, по которой вышесказанное нельзя было бы сделать с enum
, но если вы собираетесь делать многоиз int
сравнения, сравнение int
с enum
требует надоедливого приведения .
Оператор if / else с огромными отрицательными целыми числами очень уродлив и труден дляпрочитайте
Позже вы можете использовать его в if
или switch
инструкциях следующим образом:
switch (someNumber)
{
case TextureConstants.Diffuse:
// do something
break;
case TextureConstants.SemiTransparent:
// do something
break;
case TextureConstants.Masked:
// do something
break;
}
Словарь
Если вам не нравится *Вы можете использовать 1037 * операторов Dictionary<>
:
public enum Textures
{
Diffuse,
SemiTransparent,
Masked
}
// initialise the dictionary
Dictionary<int, Textures> dict;
dict[TextureConstants.Diffuse] = Textures.Diffuse;
dict[TextureConstants.SemiTransparent] = Textures.SemiTransparent;
dict[TextureConstants.Masked] = Textures.Masked;
int someNumber = // ...
if (dict.TryGetValue (someNumber, out var texture))
{
// got one
if (texture == Textures.Diffuse) // ...
}