字典的通用值
本文关键字:字典 | 更新日期: 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以获得解释。