2016-01-11 2 views
2

Я пытаюсь перевести определенный код на C#.Что означает этот ситакс в VB «If (a & b)»

В основном я понимаю большую часть кода, с которым я имею дело, и даже цель исходного кода. , но я хочу быть уверенным, что все мои базы покрыты.

его 5-й пост в этой теме: http://www.pcreview.co.uk/threads/how-to-use-getwindowlong-properly-in-vb-net.1312789/ пользователем Krešimir

код на вопрос:

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 

Я не понимаю, что такое «Если (в отставке И WS_BORDER)» оператор должен делать, и как перевести его на C#

это:

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

или что-то еще?

Спасибо.

Редактировать: примечание. Если я использую вышеупомянутый оператор C#, VS дает мне уведомление, что «результат выражения всегда false, поскольку значение типа« int »никогда не равно« null »типа« int? » ^ Я предполагаю, что я может пренебрегать им (придумывая его, как мы говорим), но если sm1 хочет дать мне «бесплатное объяснение», я был бы признателен за это: *

ps. Я действительно новичок в этом, жаль, если я проглядел что-то очевидное

+6

Это побито и –

+0

оператор & не может быть применен к операндам типа «int» и «bool» Пробовал его с помощью «ret & WS_BORDER! = Null». –

+0

Извинения, там важны круглые скобки. Пропустил это. См. Ответ Гусмана. –

ответ

6

ни один из предыдущих ответов не правы..

if((ret & WS_BORDER) != 0) 

Это проверка, чтобы увидеть, если переменная содержит флаг, в этом случае WS_BORDER

+0

ничего себе! Спасибо! оно работает. Я уже два дня разбивал свои яйца над этим. (был немного застенчив, чтобы опубликовать здесь ... это мой первый пост, когда-либо на stackoverflow) TY GUYS !!! Это было больше, чем я надеялся! 10 минут проблема решена !!! ЛЮБИТЬ ЭТО! виртуальное пиво для всех я! –

+0

Рад помочь: D – Gusman

-1

Это побитовая логическая операция. Когда Visual Basic преобразует числовые значения типа данных в Boolean, 0 становится False, а все остальные значения становятся True. Таким образом, если оператор не 0:

User32DLL.GetWindowLong(Me.Handle, -16)

... и WS_BORDER не falsy результат будет истинным. Если они ложны, результат будет ложным.

Смежные вопросы