2014-12-12 7 views
7

У меня есть класс VB, который перегружает оператор Not; это не похоже на использование приложений C#.Использование перегруженного VB.NET Не оператор от C#

Public Shared Operator Not(item As MyClass) As Boolean 
    Return False 
End Operator 

я могу использовать это в VB.NET:

If Not MyClassInstance Then 
    ' Do something 
End If 

Я пытаюсь нас это в C# приложение, но оно не будет строить.

if (!MyClassInstance) 
{ 
    // do something 
} 

Я получаю ошибку

Operator '!' не может применяться к операнду типа «MyClass»

Может ли кто-нибудь сказать мне, что мне не хватает?

+0

попробуйте записать имя класса с помощью скобок параметров, потому что вы должны вызвать эту функцию, возвращающую логическое значение. т.е. 'if (! MyClassInstance()) { // сделать что-то }' – sohaiby

ответ

15

Оператор Not в VB.NET - это побитовый оператор, он производит дополнение своего операнда. Он не имеет эквивалента оператора C12 !, логического оператора. Вы должны использовать эквивалентный оператор побитового в C# использовать VB.NET перегрузки оператора:

if(~MyClassInstance) 
{ 
    // do something 
} 

Вы можете написать функцию в VB.NET, который будет отображать до логического оператора C#. Это должно выглядеть так:

<System.Runtime.CompilerServices.SpecialName> _ 
Public Shared Function op_LogicalNot(item As MyClass) As Boolean 
    Return False 
End Function 
+0

Спасибо за объяснение, к сожалению, если я использую op_LogicalNot, мне также не разрешено использовать оператор VB Not, поэтому я могу его использовать странно в VB или странно в C#. Я просто придерживаюсь использования побитового оператора в C#. –

+1

Увлекательная визуальная студия жалуется, что метод с тем же именем объявляется дважды, но он строит и запускает. Cheers. –