C# 为什么人们使用ProjectData

C# 为什么人们使用ProjectData,c#,C#,最近我看了一些网络编码。我发现有些人在catch块中使用class catch (Exception exception1) { //ProjectData.SetProjectError(exception1); Console.WriteLine(exception1.ToString()); Console.WriteLine(); Console.WriteLine(sSQL

最近我看了一些网络编码。我发现有些人在
catch
块中使用class

 catch (Exception exception1)
        {
            //ProjectData.SetProjectError(exception1);
            Console.WriteLine(exception1.ToString());
            Console.WriteLine();
            Console.WriteLine(sSQL);
            //ProjectData.ClearProjectError();
        }
我在msdn上搜索了它,其中提到此API支持.NET Framework基础架构,不打算直接从代码中使用


我很好奇人们使用它的原因。你能给我解释一下吗?

我的经验是,这种类型的代码使用在从VB6转换而来的c#/VB.NET项目中。在开发新的c#/VB.NET解决方案/项目时,不应使用这种做法


注意:此技术可以安全地替换为适当的异常处理,您可以在其他.NET解决方案/项目中看到这些异常处理。

此代码是由将VB代码转换为C#的代码转换工具发出的,或者是由反编译最初使用VB创建的程序集产生的


我正在将一个VB项目移植到Mono,发现VB编译器在任何catch块中注入了这些调用
ProjectData.SetProjectError(exception)
ProjectData.ClearProjectError()
,并试图找到一种方法阻止编译器这样做,因为Mono没有实现
ProjectData
模块。在我的研究中发现了你的问题

因此,对于那些感兴趣的人来说,这是旧的遗留vb6的结果。当vb6启动时,有一个err对象仍然存在,但已移动到vb中的projectdata对象。如果像我这样的人还记得vb6(这是恐龙在地球上漫游的时候),那么接下来就有一个关于错误恢复的简单调用。如果你不喜欢那些讨厌的小例外。大多数vb6程序都大量使用它,瞧,你没有例外,因为你忽略了它。这就是解释

catch(Exception exception1)//捕获刚刚发生的任何异常

    {

        ProjectData.SetProjectError(exception1); // set the information 
//如果有人真的想检查

        ProjectData.ClearProjectError(); //clear the err object
    }

正如您所看到的,这完全忽略了任何异常,并且以真正的vb6方式,您的代码只是在没有任何解释的情况下爆炸。不用说,如果有人编写这样的代码或以这种方式使用vb,我会找到你并找出一种方法将你监禁。

乍一看,我相信作者试图将此异常设置为vb内部错误。这个问题也许应该问你所指的代码的作者。如果你使用反射器反编译VB中构建的程序集,你会发现VB编译器悄悄地注入了很多这样的调用