- PR -

別クラスからのException catchについて

投稿者投稿内容
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-07-11 20:59
こんにちは。
開発環境は
 VS2008、C# です、お願いします。

Exceptionのネストで下位のthrowを上位へ渡すのは

下位で throw new Exception("エラー");
または
catch (Exception ex)
{
throw ex;
}
などとすれば良いと思うのですが、別のクラスで発生したExceptionのエラーが
上位のCatchにくると、もみ消されてしまう状態で困っています。
以下のコードで「意図的なエラー」を上位のExceptionまで引っ張ってきたいです。
どなたかご教示下さい。

【状況】
共通クラスファイルとして:Common.cs ←別の階層(フォルダ)に配置してます。
画面プログラムとして  :test.aspx.cs

コード:
--- test.aspx.cs ---
  try
  {
    ・・・共通処理・・・
     Common.testMethod();
  }
  catch
  {
     throw;
  }
  finally
  {
  }
--- Common.cs ---
public static testMethod()
{
    try
    {
        if (xxxxx)
        {
            throw new Exception("意図的にエラー");
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-07-11 21:13
throw; とだけ書けば良いとかそういうお話だったり。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-07-11 23:56
下位の例外処理で特に何もしないのであれば、そもそも catch しなければいいような気も。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-07-14 12:01
「上位のCatchにくると、もみ消されてしまう状態」というのが、わかりません。
どこで揉み消されているのでしょう?揉み消されているなら、上位でキャッチ出来ないと思います。
それとも、一部の情報だけが消えてしまっているのでしょうか?そうであるなら、どの情報が消えているのでしょう?

上位は「throw;」なのに、下位は「throw ex;」なのは、なぜ?
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-07-15 18:34
みなさん、コメントありがとうございます!
ごたごたしててここにアクセスしてませんでいた(汗

えっとですね。。。
前回記述させてもらった下位プログラムでthrow new Exception("コメント");
の"コメント"を上位プログラムまで引っ張ってきたいのですが、
上位プログラムのcatchまでくると「オブジェクトが参照状態にありません」
のようなエラーになってしまい、困っています。
(エラー自体はCatchできてるのですが)

1つのプログラム内(1ファイル内)だと下位メソッドで指定したExceptionの
コメントが上位メソッドまで引き継がれるのですが、
別ファイル(共通クラス.cs)の下位メソッドで発生させたExceptionのコメントは
上位メソッド(画面用.aspx.cs)にくると下位で設定したコメントが引き継がれない
状態です。(InnerException内にも引き継がれてませんでした)

上手く説明できませんが、ご指摘宜しくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-07-15 19:46
問題を、「解決して欲しい」と思って質問文を書くのではなく、「伝えよう」と思って質問文を書いて下さい。何がおこっているのか、ようわからん。

とりあえず、あなたの何が間違っていることは、フレームワークから上がってくる例外が「揉み消されていない」ことから明らかです。
あるいは、現象が確認できる最小限のコードを下さい。

ASP.NET のようなので、なんとなく、サーバ コードとクライアント コードをごちゃまぜにして混乱しているのではないかと思います。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-07-15 21:25
すみません、わかりづらくて。
以下コードです。
@のExceptionで設定しているメッセージをAのCatchまで引継ぎたいのですが、
メッセージが引き継がれない状態です。
Exceptionの処理をちゃんと理解していないので、やはりコードの不備でしょうか。
宜しくお願い致します。

コード:
◆画面のサーバーサイド処理(〜.aspx.cs)
        protected void PdfPrint(object sender, EventArgs e)
        {
            string filePath = Session["s_ApplicationPath"].ToString();

            try
            {
                // Print PDF file
                CommonFunction.PrintProcess(filePath);

            }
            catch
            {
                throw; A←ここまでメッセージを引継ぎたい
            }
            finally
            {
            }
        }
◆共通クラス(〜.cs)
        public static void PrintProcess(string printFile)
        {
            Process printProcess = new Process();
            Boolean printFlg = false;
            try
            {
                // Exist printer
                foreach (string printerName in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                {
                    if (printerName.Equals("EPSON Printer"))
                    {
                        printFlg = true;
                        break;
                    }
                }

                if (!printFlg)
                {
                    throw new Exception("プリンターが見つかりません!"); @
                }

                printProcess.StartInfo.FileName = "Acrobatのパス";
                printProcess.StartInfo.Verb = "open";
                printProcess.StartInfo.Arguments = " /n /t " + printFile;
                printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                printProcess.StartInfo.CreateNoWindow = true;
                printProcess.Start();
                // wait time two secound
                printProcess.WaitForExit(2000);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (!printProcess.HasExited)
                {
                    printProcess.Kill();
                    printProcess.Dispose();
                }
            }
        }


なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2008-07-15 21:59
引用:

Liquid_Forceさんの書き込み (2008-07-15 21:25) より:
@のExceptionで設定しているメッセージをAのCatchまで引継ぎたいのですが、
メッセージが引き継がれない状態です。
コード:
            catch
            {
                throw; A←ここまでメッセージを引継ぎたい
            }




とりあえず、今現在Aのところでどうやってメッセージを取り出そうとしてるのか書いてみてください。

それともそもそもメッセージの取得の仕方自体がわかってないということでしょうか?
もみ消されるとは、具体的にはどういう状態を言っていますか?
「オブジェクトが参照状態にありません」のようなエラーとは、具体的に何をしたときにどこに表示されているものですか?

スキルアップ/キャリアアップ(JOB@IT)