布尔值是.NET中的两个字节?

Neo*_*isk 17 .net vb.net memory-management boolean

这个问题来自这里.我在VS中尝试了这个语句,看看会发生什么:

Len(Name <= 3)
Run Code Online (Sandbox Code Playgroud)

根据这个答案也是这个,布尔要消耗4个字节.根据MSDN,Len函数在VB中

返回一个整数,该整数包含字符串中的字符数或存储变量所需的标称字节数.

Name <= 3应该将3转换为String并执行字符串比较,返回一个布尔值,因此Len应评估其中的字节数,该值应为4.出于某种原因,无论第二个参数如何,上面的代码都返回2.换句话说,Len(True)也返回2.尝试不同的平台目标(32和64) - 同样的事情.

为什么Len(Boolean)返回2而不是4?

Han*_*ant 16

使用用户定义的类型和对象变量,Len函数返回FilePut函数将写入文件的大小.如果Object包含String,它将返回字符串的长度.如果一个Object包含任何其他类型,它将返回该对象的大小,因为它将由FilePut函数写入该文件.

Len()是一个遗留函数,它只应该在从上一代Visual Basic项目移植的代码中使用.它通常出现在涉及VB值的二进制序列化的代码中.在旧版本中,基本类型的大小不同. Integer例如16位,解释了你在网上找到的使用Long的大量坏的pinvoke声明.并且Boolean是引擎盖下的VARIANT_BOOL,值为16位.此外,通过将其True值转换为-1而不是1来古怪.

显然采用.NET大小会对VB6程序编写的文件中存在的大量数据进行严重改变.或者通过TCP连接发送的二进制数据.等等.因此,Len()函数返回传统大小.