.NET中可以使用通用的BitConverter.GetBytes吗?

时间:2010-03-03 10:38:10

标签: .net generics byte

是否可以创建 BitConverter.GetBytes()这样的方法,该方法也接受对象类型的参数作为输入,而不使用编组完成here

或者唯一的解决方案是,如果将Object类型作为输入,是在所有可用的.NET 值类型上实现大小写

2 个答案:

答案 0 :(得分:5)

不,不是。类或结构的内部布局是不可发现的。在[StructLayout]的引导下,需要进行封送处理,以将未记录的布局转换为已知布局。 JIT编译器很容易利用这一点,它重新排序结构中的字段,例如使它们正确对齐并且需要最少的存储空间。这打败了任何与非托管指针混淆的技巧。简单的值类型可以预测,但它们已经被BitConverter很好地覆盖了。结构是你的克星。

这就是为什么.NET框架支持内存映射文件需要这么长时间的原因之一。但它们将在.NET 4.0中可用,您可以利用MemoryMappedViewAccessor类。它仍然使用编组,它隐藏在地垫下。

答案 1 :(得分:0)

Bitconverter.GetBytes((动态)V);