转换VB时出错..NET转换为c#

本文关键字:转换 NET 出错 VB | 更新日期: 2023-09-27 18:10:43

我试图在vb.net控制台文件转换为c#,但当我试图运行控制台应用程序时,我得到了3个错误,以下是错误。

Error   2   Single-line comment or end-of-line expected

private static MySettings defaultInstance = (MySettings)global::System.Configuration.ApplicationSettingsBase.Synchronized(new MySettings());
    #region "My.Settings Auto-Save Functionality"
    #if _MyType = "WindowsForms"    
Error   3   Single-line comment or end-of-line expected
        get {
            #if _MyType = "WindowsForms"
            if (!addedHandler) {
                lock (addedHandlerLockObject) {
                    if (!addedHandler) {
                        My.Application.Shutdown += AutoSaveSettings;
                        addedHandler = true;
                    }
                }
            }
            #endif
            return defaultInstance;

thanx

转换VB时出错..NET转换为c#

这是一个构建错误,而不是运行时错误。在c#中,#if指令比其他语言有更多的限制。来自语言参考:

当c#编译器遇到一个#if指令,最后是一个#endif指令时,它只在定义了指定符号的情况下编译指令之间的代码。不像C和c++,你不能给符号赋数值;c#中的#if语句是布尔值,只测试符号是否已定义。

还要注意#define的局限性。同样来自参考文献:

使用#define来定义一个符号。当您使用该符号作为传递给#if指令的表达式时,表达式的计算结果将为true,如下面的示例所示:

#define DEBUG

不能像在C和c++中那样使用#define指令来声明常量值。c#中的常量最好定义为类或结构的静态成员。如果你有几个这样的常量,考虑创建一个单独的" constants "类来保存它们。

所以你需要输入

#define WindowsForms
#if (!WindowsForms)
#define WPF
#endif

放在文件的开头,而不是使用一个具有多个可能值的预处理器符号。对于项目范围的预处理器符号,在编译项目时使用/define选项。