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()函数返回传统大小.
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |