如何确定Type值的大小?
let typ = if true then (123).GetType() else "asdf".GetType();;
let sz = sizeof<typ>
let sz = sizeof<typ>;;
----------------^^^
error FS0039
一种解决方案是使用Marshal.SizeOf(obj),但可能存在另一种解决方案吗?
答案 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>
提示是< ... >
内的任何内容都需要是一个类型,而不是一个变量。