无法将此行vb代码转换为C#

时间:2013-02-25 16:57:42

标签: c# vb.net preprocessor-directive

我有一个vb.net项目,我正在尝试转换为C#。我有一个名为MyWebExtension.vb的文件,其中有一行代码#If _MyType <> "Empty" Then

我尝试转换为C##if (_MyType != "Empty")

运行应用程序时出现以下错误:

  

预处理程序表达式无效。

我的转换错误是什么?

2 个答案:

答案 0 :(得分:2)

C#中的

#define只能指定'flags',而不是VB允许你做的常量值。

在C#中,你可以拥有:

#define _MyType

#If _MyType

或:

#if ! _MyType

但在VB中,您可以:

#Const _MyType = "SomeType"

#If _MyType = "SomeType"

没有好的解决方法 - 你可以使用常量,但当然这些只能在一个类中引用。

答案 1 :(得分: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

  

当C#编译器遇到#if指令时,最终会遇到   通过#endif指令,它将在之间编译代码   仅当指定的符号已定义时,指令。与C和C ++不同,   您不能为符号指定数值; C#中的#if语句   是布尔值,仅测试符号是否已定义。

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

您可以使用运算符==(相等),!=(不等式)来测试   对于真或假。 True表示符号已定义。该声明    - #END如果DEBUG与#if(DEBUG == true)具有相同的含义。运营商&amp;&amp; (和),和|| &GT; (或)可用于评估是否有多个符号   已定义。您还可以使用符号和运算符进行分组   括号中。