Tôi đã thử nghiệm nó và nhận được kết quả như sau:
Public Module BooleanTest
Public Function GetTrue() As Boolean
GetTrue = True
End Function
End Module
...
[StructLayout(LayoutKind.Explicit)]
struct MyStruct
{
[FieldOffset(0)]
public bool MyBool;
[FieldOffset(0)]
public int MyInt32;
}
static void Main(string[] args)
{
MyStruct b1, b2;
b1.MyInt32 = 0;
b2.MyInt32 = 0;
b1.MyBool = BooleanTest.BooleanTest.GetTrue();
b2.MyBool = true;
Console.WriteLine(b1.MyInt32);
Console.WriteLine(b2.MyInt32);
}
này sẽ cho kết quả:
Tôi hy vọng điều này chứng minh rằng tất cả các giá trị True
bên trong .NET luôn giống nhau. Lý do rất đơn giản: Tất cả các thành viên .NET phải liên lạc với nhau. Nó sẽ là lạ nếu object.Equals(trueFromCSharp, trueFromVB)
sẽ dẫn đến sai (như sẽ trueFromCSharp == trueFromVB
).
CInt
chỉ là một chức năng sẽ chuyển đổi True
thành -1
. Một chức năng khác Int
sẽ trả lại 1
. Nhưng đây là những người chuyển đổi và không nói bất cứ điều gì về các giá trị nhị phân.
Nguồn
2013-05-09 15:16:28
Tôi vừa thử nghiệm mẫu này. Một boolean trong VB.NET không bằng '-1', nó chỉ bằng' 1'. Tôi đã kiểm tra điều này bằng cách tạo một cấu trúc với hai trường chồng chéo bằng cách sử dụng FieldOffsetAttribute. Bằng cách đó bạn có thể thấy giá trị nhị phân chính xác của boolean.'CInt' chỉ là một chuyển đổi. Đề cập đến tài liệu cũ không thực sự giúp tôi đoán. –
Tôi đã chuyển 'True'into một hàm đã chấp nhận một số nguyên và nhận giá trị' -1' trong VB.NET. Trong bài viết Martjin references (http://msdn.microsoft.com/en-us/library/ae382yt8.aspx) có vẻ như cách bạn chuyển đổi Boolean xác định giá trị số nguyên nào bạn nhận được. –