質問
これは簡単な質問だと思いますが、答えはありません。ここにシナリオと質問があります。
特定の形式で保存された配列があります。この形式には、ヘッダーレコードとそれに続く複数の詳細レコードが含まれます。レコードのヘッダーは、たとえば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)は簡単です。
所属していません StackOverflow