我有一个正在尝试转换为 C# 的 vb.net 项目。我有一个名为 MyWebExtension.vb 的文件,其中有这行代码#If _MyType <> "Empty" Then
我试图转换成 C##if (_MyType != "Empty")
当我运行应用程序时,我收到以下错误:
无效的预处理器表达式。
我的转换做错了什么?
我有一个正在尝试转换为 C# 的 vb.net 项目。我有一个名为 MyWebExtension.vb 的文件,其中有这行代码#If _MyType <> "Empty" Then
我试图转换成 C##if (_MyType != "Empty")
当我运行应用程序时,我收到以下错误:
无效的预处理器表达式。
我的转换做错了什么?
#define
在 C# 中只能指定“标志”,而不是 VB 允许的常量值。
在 C# 中,您可以拥有:
#define _MyType
#If _MyType
或者:
#if ! _MyType
但在 VB 中,您可以拥有:
#Const _MyType = "SomeType"
#If _MyType = "SomeType"
对此没有很好的解决方法 - 您可以使用常量,但当然只能从类中引用这些常量。
以下示例显示了一些有效和无效的预处理器表达式:
#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) 可用于评估是否已定义多个符号。您还可以使用括号对符号和运算符进行分组。