我试图将某个代码翻译成c#。
基本上我理解我处理的大部分代码,甚至是原始代码的意图。 但是我想确保我的所有基地都被覆盖了。
这是该主题的第5篇帖子:http://www.pcreview.co.uk/threads/how-to-use-getwindowlong-properly-in-vb-net.1312789/ 用户Kresimir
有问题的代码:
Dim ret As Integer = User32DLL.GetWindowLong(Me.Handle, -16)
Dim s As String = String.Empty
If (ret And WS_BORDER) Then s &= "WS_BORDER" & NewLine
我不明白" If(ret和WS_BORDER)"声明应该做,以及如何将其转换为C#
是吗:
if (ret!=null & WS_BORDER!=null)
或其他什么?
谢谢。
编辑:注意。如果我使用上面提到的C#语句,VS会给我一个通知"表达式的结果总是为false,因为类型为" int"绝不等于" null"类型" int?" ^我想我可以忽略它(在我们说话的时候谷歌搜索),但如果sm1希望给我一个免费的解释"我很感激:*
PS。我真的很喜欢这个,所以如果我忽略了一些明显的事情,我很抱歉。
答案 0 :(得分:6)
之前的答案都没有:
if((ret & WS_BORDER) != 0)
这是检查变量是否包含标志,在本例中为WS_BORDER。
答案 1 :(得分:-1)
这是一种按位逻辑运算。当Visual Basic将数字数据类型值转换为布尔值时,0变为False,所有其他值变为True。所以如果声明不是0:
User32DLL.GetWindowLong(Me.Handle, -16)
...并且WS_BORDER不是假的,结果将是真的。如果其中一个为假,则结果为false。