c#泛型类型和实类型关联

本文关键字:类型 关联 泛型类型 | 更新日期: 2023-09-27 18:26:49

我正在使用tcp/ip构建一个通信系统。我正在使用.NET、C#和VS2012。

这些系统在它们之间交换元数据。基本消息包含元数据名称及其值(数据本身)。一个系统不知道其他系统数据类型。

该消息具有以下结构:FromNode、ToNode、MetadataName、MetadataType、MetadataSizeInBytes、MetadataValue。所有消息都是带分隔字段的纯字节[](不序列化,因为有些系统可能带有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

c#泛型类型和实类型关联

您应该使用一个对象来保存数据,使用一个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;
        }