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