【问题标题】:whats the meaning of this sytax in VB "If(a & b)" [duplicate]VB“If(a&b)”中这种语法的含义是什么[重复]
【发布时间】:2016-04-16 01:35:01
【问题描述】:

我正在尝试将某个代码翻译成 c#。

基本上我了解我正在处理的大部分代码,甚至了解原始代码的意图。 但我想确保我的所有基础都覆盖了。

这是本主题的第 5 篇文章:http://www.pcreview.co.uk/threads/how-to-use-getwindowlong-properly-in-vb-net.1312789/ by 用户 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 And WS_BORDER)”语句应该做什么,以及如何将其翻译成 C#

是吗:

    if (ret!=null & WS_BORDER!=null)

还是别的什么?

谢谢。

编辑:注意。如果我使用上面提到的 C# 语句,VS 会通知我“表达式的结果总是错误的,因为“int”类型的值永远不会等于“int”类型的“null”? ^我想我可以忽略它(在我们说话时搜索它),但如果 sm1 希望给我一个“免费解释”,我将不胜感激:*

ps。我真的是一个新手,所以如果我忽略了一些明显的东西,我很抱歉。

【问题讨论】:

  • 按位和
  • 运算符 & 不能应用于 "int" 和 "bool" 类型的操作数 也尝试了 "ret & WS_BORDER != null"。
  • 抱歉,括号在这里很重要。错过了。请参阅古斯曼的回答。
  • 嗯,要清楚,它总是两个操作。我的错误只是!= 的优先级高于&,这是我没有考虑过的。
  • VB.Net - And Operator 似乎很好地解释了正在发生的事情。您能否澄清一下您没有从 MSDN 文章中得到什么?

标签: c# vb.net if-statement translate


【解决方案1】:

前面的答案都不对:

if((ret & WS_BORDER) != 0)

这是检查变量是否包含标志,在本例中为 WS_BORDER。

【讨论】:

  • 哇!谢谢!有用。这两天我一直在为此烦恼。 (在这里发帖有点害羞......这是我在stackoverflow上的第一篇文章)TY GUYS!这超出了我的预期! 10分钟问题解决!!!爱它!虚拟啤酒给你们!
【解决方案2】:

这是一个按位逻辑运算。当 Visual Basic 将数值数据类型值转换为布尔值时,0 变为 False,所有其他值变为 True。所以如果语句不为0:

User32DLL.GetWindowLong(Me.Handle, -16)

...并且 WS_BORDER 不是假的,结果将是真的。如果其中任何一个为假,则结果将为假。

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多