转换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
这是一个构建错误,而不是运行时错误。在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选项。
。