明示的な列挙変換とは少し混乱しています。それが実際に何を意味するのか。
私は列挙型を使用して、かなりクールな期待される動作を実行し、同時に優れたマジックナンバーの置換として機能しようとしています。1つの石で2羽の鳥を殺します。
私はこのようなものを手に入れました。
public enum Size {Bare, Fixed, VariableByte, VariableShort};
期待される動作の美しさは、私が使用しているこのプロトコルにあります。
オペコードコマンドなしでパケットを送信する場合、それはベアパケットと呼ばれます。これは、バッファサイズが次のようなペイロードであることを意味します。
新しいバイト[payloadSize]; ただし、[payloadSize+Bare]は同等です
byte[] buffer = new byte[payloadSize+Bare]; //Bare = 0
パケットが固定されている場合は、前に追加する必要のあるOpCodeが含まれています。っていうことは
新しいバイト[1+ペイロード];
byte[] buffer = new byte[payloadSize+Fixed] //Fixed of course = 1.
VariableByteには、前にオペコードがあり、パケットのサイズを表すバイトが含まれています。これは、255サイズ範囲などのパケット用です。
新しいバイト[2+ペイロード];
VariableShortは、パケットサイズがワード65535ペイロードである可能性があることを除いて、上記と同じです。これは
プロトコルが変更された場合、将来的に問題が発生する可能性があります。将来、問題を修正するために列挙型に値を割り当てる必要があるかもしれませんが、今のところ、インデックス=0で始まる有効な列挙型です[グーグルした後、デフォルト値の0で列挙型を開始しない]それは正しい有効な列挙型ではありません..lolidkそれが意味すること..おそらく列挙型の操作にストレスをかけます。
とにかく私の質問に戻ります。
私はすでに知っているように私は次のようなことができます
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のオペランドには適用できません。
だから、列挙型の前にバイトキャストを置くことは本当に何を意味するのだろうか?それは私が上で試みたようなクールなことを本当にさせないので。
バイトのみにキャストされるように制限するだけですか?または何かまたはそれは見た目だけのために昔ながらですか?
何も制限していないようです。
byte[] buffer = new byte[payloadZie+(byte)Size.Fixed];
それでも機能し、もちろんint!=byteです。
これが何を意味するのか疑問に思っています。
質問が多すぎる場合は申し訳ありません:\
フォーラムの期間よりも良い回答を提供してください。