Я немного запутался с явными преобразованиями перечисления, что это действительно означает ...
Я пытаюсь использовать Перечисление, чтобы сделать довольно крутое ожидаемое поведение и действовать как хорошая замена магического числа одновременно ... убить двух зайцев одним выстрелом.
Я получил что-то вроде этого.
public enum Size {Bare, Fixed, VariableByte, VariableShort};
Прелесть ожидаемого поведения в том протоколе, с которым я работаю.
Если я просто отправляю пакет без какой-либо команды opcode, он называется Bare-пакетом, что означает, что размер буфера просто полезен, как
новый байт [payloadSize]; но [payloadSize + Bare] будет эквивалентно
byte[] buffer = new byte[payloadSize+Bare]; //Bare = 0
Если пакет фиксированный .. он содержит код операции, который должен быть добавлен впереди. так что это
новый байт [1 + полезная нагрузка];
byte[] buffer = new byte[payloadSize+Fixed] //Fixed of course = 1.
VariableByte содержит передний код операции и байт для представления размера пакета. Это для пакетов в диапазоне размеров 255 и т. Д., Который
новый байт [2 + полезная нагрузка];
VariableShort такой же, как указано выше, за исключением того, что размер пакета может быть словом 65535 полезной нагрузки. который
У меня могут возникнуть проблемы в будущем, если протокол когда-нибудь изменится, тогда мне, возможно, придется присваивать значения перечислению в будущем, чтобы исправить проблемы, но сейчас это допустимое перечисление, которое начинается с index = 0 [после поиска в Google I слышал, что если вы не запускаете перечисление со значением по умолчанию 0], то это неверное действительное перечисление .. lol idk, что это значит .. вероятно, ставит акцент на операции перечисления.
В любом случае вернемся к моему вопросу.
как я уже знаю, я могу сделать, например,
int Ret = (int)Size.Bare;
или
int Ret = Convert.ToInt32(Size.Bare);
byte[] packet = new byte[payloadSize+Ret]
или лучше.
byte[] packet = new byte[payloadSize+(int)Size.Bare]
Я стараюсь избегать как можно большего количества строк кода, возможно, даже повысить производительность.
Я читал MSDN и обнаружил, что вы можете сделать это .. Я действительно не обнаружил его цель, но я предсказываю, что это может означать ..
public enum Size : int {Bare, Fixed, VariableByte, VariableShort};
Я полагаю, это будет возможно
byte[] packet = new byte[payloadSize+Size.Fixed];
byte[] packet = new byte[payloadSize+Size.VariableShort];
и т.д ...
Но, к сожалению, это не так, и я получаю эту старую ошибку
Оператор '+' нельзя применить к операндам типа 'int' и Packet.Size
так что мне интересно, что на самом деле означает поставить байтовый код перед Enum?
Поскольку это действительно не заставляет меня делать какие-то классные вещи, как я пытался выше.
Ограничивает ли это только приведение к байту ? или что-то или это просто старый только для внешности?
Кажется, ничего не ограничивает.
byte[] buffer = new byte[payloadZie+(byte)Size.Fixed];
Все еще работает и, конечно, int! = Byte .
Просто интересно, что бы это могло значить.
Спасибо, извините, если я задаю слишком много вопросов: \
Вы, ребята, даете лучшие ответы, чем любой период форума.