0

tcp/ip を使用して通信システムを構築しています。.NET、C#、および VS2012 を使用しています。

これらのシステムは、それらの間でメタデータを交換します。基本メッセージには、メタデータ名とその値 (データ自体) が含まれます。1 つのシステムが他のシステムのデータ型を認識していません。

メッセージには次の構造体があります: FromNode、ToNode、MetadataName、MetadataType、MetadataSizeInBytes、MetadataValue。すべてのメッセージは、フィールドが区切られた純粋な byte[] です (一部のシステムは Unix フレーバーである可能性があるため、シリアル化されていません)。

そのメッセージを受け取ったら、その型に基づいて、メタデータを実際の変数に関連付けたいと思います。そこで、次のクラスを作成しました。

パブリック クラス RealMetadata

{
         public string Type { get; set; }
         public Type   Value { get; set; } <<--- I´ve tried var and object, with no success.
}

コードの後半で、メタデータの実際の値にアクセスしたい:

if (Type == "INTEGER")
      int RealValue = (int) Value;
if (Type == "STRING")
      string RealValue;
      Buffer.Blockcopy (RealValue, 0, Value, 0, MetadataSizeInValues * sizeof (char));
if (Type == "FLOAT")
      float RealValue = (float) Value;

このすべてが実行時にコンパイルされなかったり、動作しないことがあります。クラス プロパティでどの型の Value を宣言する必要があるか、またそのデータを実際の変数に取得する方法が正確にはわかりません。

アイデアや提案をありがとう。

Rds

4

1 に答える 1

1

次のように、オブジェクトを使用してデータを保持し、 Type オブジェクトを使用して格納されたデータの型を保持する必要があります。

    public Type Type { get; set; }
    public Object Value { get; set; }


        if (Type == typeof (int))
        {
            int realValue = (int) Value;
        }
        if (Type == typeof(string))
        {
            string RealValue;
            Buffer.Blockcopy(RealValue, 0, Value, 0, MetadataSizeInValues*sizeof (char));
        }
        if (Type == typeof(float))
        {
            float RealValue = (float) Value;
        }
于 2013-08-08T12:55:59.857 に答える