我正在使用实体框架,需要存储一些二进制数据。我正在成功地使用字节数组和一些辅助方法来返回其他格式的数据。
我是这样做的。
public class TestData
{
public double SampleRate { get; set; }
public byte[] ExtensionBytes { get; set; }
/// <summary>
/// Provides easy access as floats instead of bytes
/// </summary>
public float[] ExtensionValues
{
get
{
var result = new float[ExtensionBytes.Length / sizeof(float)];
Buffer.BlockCopy(ExtensionBytes, 0, result, 0, ExtensionBytes.Length);
return result;
}
set
{
byte[] result = new byte[value.Length * sizeof(float)];
Buffer.BlockCopy(value, 0, result, 0, result.Length);
ExtensionBytes = result;
}
}
}
它有效但看起来非常浪费,在C中我可能会使用像
这样的东西(float*)&byte_array)
这似乎是一个更简洁的解决方案,意味着数据不会一直在内存中来回复制。
c#
中是否有类似的简洁解决方案或者一种在实体框架中存储float或double数组的方法。
答案 0 :(得分:2)
根据与浮点数组一起使用的变量的范围,您可以使用&#39; fixed&#39;在将字节数组转换为float *时将字节数组固定在内存中的关键字,并对其进行处理。像这样的东西(语法可能会关闭):
fixed (byte* b = &theByteArray)
{
var f = (float*)b;
// do your work on f...
}
这需要您将程序集标记为“不安全”。在项目的属性中。
答案 1 :(得分:1)
我认为Sumit是正确的,但是根据其他要求,您可以实现一个实现类似Array
,var array = [1,2,3]
array.append(4) //added an item to the stack
print(array) // 1,2,3,4
let last = array.popLast()
print(last) // 4
print(array) // 1,2,3
或IEnumerable
(或最小子集)的类的类以您需要的方式展示您的收藏。 e.g。
IList