10

最近、私はWebでいくつかのコーディングを見ました。私は何人かの人々がブロックMicrosoft.VisualBasic.CompilerServices.ProjectData.ProjectDataでクラスを使うのを見つけました。catch

 catch (Exception exception1)
        {
            //ProjectData.SetProjectError(exception1);
            Console.WriteLine(exception1.ToString());
            Console.WriteLine();
            Console.WriteLine(sSQL);
            //ProjectData.ClearProjectError();
        }

このAPIは.NETFrameworkインフラストラクチャをサポートしており、コードから直接使用するためのものではないと述べたmsdnで検索しました。

なぜ人々がそれを使うのか興味があります。説明してもらえますか?

4

3 に答える 3

9

私の経験では、このタイプのコードの使用は、VB6から変換されたc#/VB.NETプロジェクトで見られます。新しいc#/ VB.NETソリューション/プロジェクトを開発するときは、この方法を使用しないでください。

注:この手法は、他の.NETソリューション/プロジェクトで見られるような適切な例外処理に安全に置き換えることができます。

于 2013-03-26T20:46:59.180 に答える
4

このコードは、VBコードをC#に変換するコード変換ツールによって発行されるか、VBを使用して最初に作成されたアセンブリを逆コンパイルした結果として発行されます。

私はVBプロジェクトをMonoに移植していますが、VBコンパイラーがこれらの呼び出しProjectData.SetProjectError(exception)ProjectData.ClearProjectError()任意のcatchブロックを挿入し、Monoがモジュールを実装していないためにコンパイラーがそうしないようにする方法を見つけようとしていProjectDataます。そして、私の研究をしている間にあなたの質問を見つけました!

于 2015-11-17T19:48:56.260 に答える
3

したがって、これは興味のある人のための古いレガシーvb6の結果です。vb6が開始されたとき、まだ存在しているがvbのprojectdataオブジェクトに移動したerrオブジェクトがありました。私のような誰かがvb6を覚えているなら(これは恐竜が地球を歩き回ったときに戻ってきました)、次にエラー再開の便利な小さな呼び出しがありました。これは、これらの厄介な小さな例外が気に入らなかった場合です。ほとんどのvb6プログラムはそれを多用し、無視したので例外はありませんでした。ここに説明があります。

catch(Exception exception1)//発生したばかりの例外をキャッチします

    {

        ProjectData.SetProjectError(exception1); // set the information 

//誰かが実際にチェックしたい場合はerrオブジェクトで

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

ご覧のとおり、これは例外を完全に無視しており、真のvb6方式では、コードは説明なしで爆発します。言うまでもなく、誰かがこのようなコードを書いたり、このようにvbを使用したりした場合、私はあなたを見つけて、あなたを投獄する方法を見つけます。

于 2015-12-22T01:28:25.060 に答える