字典的通用值

本文关键字:字典 | 更新日期: 2023-09-27 18:27:59

我有一个Dictionary<key,dataValue>。问题是dataValue的类型可以是int、float、vector2、vector3、byte、short、uint或bool。我希望避免装箱,这样我就不能将dataValue作为对象。

我可以创建一个数据类型(类或结构)来存储同一字节数组中的任何数据类型吗?数据类型中的枚举将包含类型(int、float、bool…),这样我们就知道如何解释字节数组中的数据了?

编辑:代码可能不安全。

[StructLayout(LayoutKind.Explicit)]
    struct TestUnion 
{
    [FieldOffset(0)] 
    public int i;
    [FieldOffset(0)] 
    public double d;
    [FieldOffset(0)] 
    public char c;
    [FieldOffset(0)] 
    public byte b1;
}

像这样的东西行吗?

字典的通用值

您可以使用StructLayout(LayoutKind.Explicit)和FieldOffset属性来创建等效的功能。我假设您指的是64位数据结构,它将包含8个字节或2个int。如果您确实指的是64字节的数据结构,那么您需要定义一个包含64字节和16 int的结构。(可能最好使用byte[]和int[]。)您可以在这里找到信息:

http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_csrf/html/163ab9b5-46f6-4d78-9025-f7bbba89b2e1.asp

例如:

using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct ByteArray {
  [FieldOffset(0)]
  public byte Byte1;
  [FieldOffset(1)]
  public byte Byte2;
  [FieldOffset(2)]
  public byte Byte3;
  [FieldOffset(3)]
  public byte Byte4;
  [FieldOffset(4)]
  public byte Byte5;
  [FieldOffset(5)]
  public byte Byte6;
  [FieldOffset(6)]
  public byte Byte7;
  [FieldOffset(7)]
  public byte Byte8;
  [FieldOffset(0)]
  public int Int1;
  [FieldOffset(4)]
  public int Int2;
}

如果您计划在可能具有不同端序的非x86平台上运行机器,需要注意的一件事是机器的端序。看见http://en.wikipedia.org/wiki/Endianness以获得解释。