如何确定System.Type值的大小?

时间:2014-03-20 23:11:25

标签: f#

如何确定Type值的大小?

let typ = if true then (123).GetType() else "asdf".GetType();;
let sz = sizeof<typ>

  let sz = sizeof<typ>;;
  ----------------^^^
error FS0039

一种解决方案是使用Marshal.SizeOf(obj),但可能存在另一种解决方案吗?

2 个答案:

答案 0 :(得分:4)

我认为Marshal.SizeOf就是你在这里寻找的。请注意,该方法有两个重载。

  • Marshal.SizeOf(t)MSDN)将System.Type作为参数,并返回由System.Type值表示的类型的大小(我相信这是你想要什么。)

  • Marshal.SizeOf(structure)MSDN)接受任何object并根据运行时类型返回结构的大小。

F#中的sizeof<'T>构造仅在静态知道类型时才起作用,但它会生成漂亮的单sizeof IL指令(如您所见from the source code)。

答案 1 :(得分:0)

这将获得类型变量的大小:

sizeof<System.Type>

提示是< ... >内的任何内容都需要是一个类型,而不是一个变量。