0

以下のこのメソッドは、[すべて保存]ボタンをクリックすると呼び出されます。以下に示すコードでエラーをスキップする方法はありますか?

私がこれを尋ねる理由:pDenemeProxy.dllがコードのフォルダーに存在しない場合があります。さらに、それはWindowsフォームアプリケーションです。参照にpDenemeProxy.dllがあります。また、pDenemeProxy.dllのfDenemeProxyファサードは、mDesTempがnullでない場合にのみ初期化されます。

ありがとうございました!

 private bool SaveAll()
        {
...
..
..
    if (this.mDesTemp != null)
    {           
         fDenemeProxy dnm = new fDenemeProxy();      
         dnm.SaveThisCustomer(1234,"D",true);
    }
...
..
 return;    
}

エラー:System.IO.FileNotFoundException:'pDenemeProxy、Version = 0.0.0.0、Culture = neutral、PublicKeyToken = null'

注:.net 2.0およびc#注:try catchブロックを配置するようにアドバイスする人もいますが、機能しませんでした。VS 2008のデバッグセッション中に、mDesTempがnullの場合、上記で宣言されたエラーが再び表示されることを確認しました。

4

1 に答える 1

0

コードの一部の行で、この誤った状況の条件が真の場合 (つまり、何らかの理由でアクセスできないファイルにアクセスしようとしている場合) にExceptionof 型をスローするメソッドを使用しています。System.IO.FileNotFoundException

これは、意図した正しい動作です。このエラー メッセージが表示されるときはいつでも、エラーは既に発生しており、この新しい状況に対処するのはあなた次第です。それがException-Handlingすべてです。

例外によって引き起こされたエラーに対処するには (非公式に言えば)、以前にスローされた (正式に言えば) 例外をキャッチする必要があります。

これを行うには、コードの一部 (例外のスローを継承する実際のメソッド呼び出し) を、次のようないわゆる try-catch ブロックで囲む必要があります。

private bool SaveAll()
    {
...
..
..
    if (this.mDesTemp != null)
    {       
         try {

             fDenemeProxy dnm = new fDenemeProxy();      
             dnm.SaveThisCustomer(1234,"D",true);

         } catch (FileNotFoundException e) {

             // deal with the new situation !
         }
    }
...
..
return;    
}

その意味は非常にシンプルで直感的です。

ブロック内tryでは、例外をスローできるコードを「保護」しています。このtry- ブロックの後には、任意の数の catch-block が続きます - セキュリティで保護されたコードによってスローされる可能性がある各例外に対して 1 つです。

この try-catch ブロックを正しく設定すると、(保護された) コードが例外をスローするたびに、プログラムの実行フローは終了せず (つまり、プログラムはクラッシュしません)、適切な catch に移動します。 -今経験したエラーに対処するために何でもできるブロック。

さらに、インターネットを見れば、例外処理はプログラミングの非常に重要な概念であるため、それに関する多くの情報を見つけることができますが、ここで説明しようとしたのは、最初に理解しようとする必要がある基本的な概念です。これ以上難しいことはありません ;)

于 2012-09-08T11:43:43.097 に答える