2013-02-25 3 views
1

У меня есть проект vb.net, который я пытаюсь преобразовать в C#. У меня есть файл с именем MyWebExtension.vb и в нем есть эта строка кода #If _MyType <> "Empty" ThenНе удалось преобразовать эту строку кода vb в C#

Я попытался преобразовать в C# #if (_MyType != "Empty")

При запуске приложения я получаю следующее сообщение об ошибке:

Invalid preprocessor expression.

Что я сделал не так с моим преобразованием?

+3

Бен показать полный VB строку компилятора директивы кодекса пожалуйста .. – MethodMan

+1

Показать нам полный код .. –

+1

вам не хватает что-то вроде этого Бен '#if _MyType! =«Пустой» # endif' – MethodMan

ответ

1

От Compiler Error CS1517

Следующий пример показывает некоторые действительных и недействительных препроцессора выражения:

#if symbol  // OK 
#endif 
#if !symbol  // OK 
#endif 
#if (symbol) // OK 
#endif 
#if true  // OK 
#endif 
#if false  // OK 
#endif 
#if 1   // CS1517 
#endif 
#if ~symbol  // CS1517 
#endif 
#if *   // CS1517 
#endif 

class x 
{ 
    public static void Main() 
    { 
    } 
} 

Так что я думаю, что вы можете использовать, как это;

#define _MyType 

#If _MyType 

От #if

When the C# compiler encounters an #if directive, followed eventually by an #endif directive, it will compile the code between the directives only if the specified symbol is defined. Unlike C and C++, you cannot assign a numeric value to a symbol; the #if statement in C# is Boolean and only tests whether the symbol has been defined or not.

#define DEBUG 
// ... 
#if DEBUG 
    Console.WriteLine("Debug version"); 
#endif 

You can use the operators == (equality), != (inequality) only to test for true or false . True means the symbol is defined. The statement -#if DEBUG has the same meaning as #if (DEBUG == true). The operators && (and), and || > (or) can be used to evaluate whether multiple symbols have been defined. You can also group symbols and operators with parentheses.

+0

Söner если предварительно процессор, тогда ему понадобится «#», иначе зачем использовать его в первую очередь. ?? – MethodMan

+2

-1 Вы не можете просто изменить директиву препроцессора на регулярный оператор if и ожидать, что он будет работать. – juharr

+0

@DJKRAZE и juharr, Спасибо, ребята. Ты прав! Обновлен мой ответ. –

2

#define в C# можно указать только 'флаги', а не постоянные значения, как VB позволяет делать.

В C#, вы можете иметь:

#define _MyType 

#If _MyType 

или:

#if ! _MyType 

но в VB, вы можете иметь:

#Const _MyType = "SomeType" 

#If _MyType = "SomeType" 

Существует нет хорошей работы вокруг это - вы можете использовать константы, но, конечно, на них можно ссылаться только внутри класса.

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

  • Нет связанных вопросов^_^