1

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

我试图转换成 C##if (_MyType != "Empty")

当我运行应用程序时,我收到以下错误:

无效的预处理器表达式。

我的转换做错了什么?

4

2 回答 2

2

#define在 C# 中只能指定“标志”,而不是 VB 允许的常量值。

在 C# 中,您可以拥有:

#define _MyType

#If _MyType

或者:

#if ! _MyType

但在 VB 中,您可以拥有:

#Const _MyType = "SomeType"

#If _MyType = "SomeType"

对此没有很好的解决方法 - 您可以使用常量,但当然只能从类中引用这些常量。

于 2013-02-25T17:07:54.707 回答
1

来自编译器错误 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 或 false 。True 表示符号已定义。语句 -#if DEBUG 与 #if (DEBUG == true) 具有相同的含义。运算符 && (and) 和 || > (or) 可用于评估是否已定义多个符号。您还可以使用括号对符号和运算符进行分组。

于 2013-02-25T17:02:59.203 回答