質問

これは簡単な質問だと思いますが、答えはありません。ここにシナリオと質問があります。

特定の形式で保存された配列があります。この形式には、ヘッダーレコードとそれに続く複数の詳細レコードが含まれます。レコードのヘッダーは、たとえばInt32など、データの保存に使用されたTypeCodeを示します。

byte []配列を受け取り、バイトデータをC#の適切な形式に変換するルーチンがあります。このルーチンには、変換を成功させるために適切なバイト数が必要です。

Q。それで、すべてのタイプの長さをハードコーディングすることなく、変換関数に渡すために、指定されたTypeCodeからバイトの長さを取得するにはどうすればよいですか?

役に立ちましたか?

解決

TypeCode は固定された値のセットの単なる列挙であると考えると、それらの辞書を簡単にハードコーディングできます。たとえば、

private static readonly Dictionary<TypeCode,int> TypeCodeLength =
    new Dictionary<TypeCode,int> {
    { TypeCode.Int32, 4 },
    { TypeCode.Int64, 8 },
    { TypeCode.Char, 2 },
    // etc
}

(同等の解決策は、switch / caseステートメントを使用することです。値を含めるだけの場合、実際には同等です。)

string object などの一部は可変になりますが、その他は DateTime などのエンコード方法によって異なります。

これが標準の変換を使用していない限り、フレームワーク内で長さを提供できるものはありません。ハードコーディングは一般的に眉をひそめていることは知っていますが、この場合は1か所にしか存在せず、最も簡単なオプションになります。

他のヒント

TypeCodeからTypeを作成する方法... 、できません(完全なスイッチなし)。もちろん、他の方向(Type-&gt; TypeCode)は簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top