- PR -

C# での例外処理の後処理

1
投稿者投稿内容
木枯らし紋次郎
会議室デビュー日: 2009/02/19
投稿数: 3
投稿日時: 2009-02-19 21:53

下記のようなコードで、例外処理の後処理について
先輩諸氏のアドバイスを頂ければと思っております。

CallMethod2で例外をキャッチしていますが、ここで例外を
キャッチし処理をした後、直ぐに、このCallMethod2の処理を中断し、
呼び出し元にエラーを返したいと思っているのですが、
こうした事は可能でしょうか?

catch (Exception ex){}の中で return; するなどしてみましたが、
上手く行きませんでした。

または、こうした場合は、CallMethod2 で例外処理はせず、
CallMethod1 で例外処理をする方が良いのでしょうか?

環境をC#に移行し始めたばかりで、まだセオリーが分かっていない
のだと思いますが、何卒ご教授願えればと思います。



static void Main(string[] args)
{
CallMethod1(out value1)
}
CallMethod1(out string value1)
{
CallMethod2(out value2)

}
CallMethod2(out string value2)
{
try{
}
catch (Exception ex)
{
}
}


渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2009-02-19 22:22
引用:

呼び出し元にエラーを返したいと思っているのですが、



「呼び出し元にエラーを返す」というのが、具体的にどういうことをイメージして言っているのか分かりませんが

try
{
// 何かする
}
catch
{
throw;
}

てこと?
木枯らし紋次郎
会議室デビュー日: 2009/02/19
投稿数: 3
投稿日時: 2009-02-19 22:49
渋木宏明(ひどり)様

早速のご返信誠にありがとうございます。
また、質問の内容が不明瞭であった点をお詫びいたします。

「呼び出し元にエラーを返す」ということですが、例えば、こういう事をしたいと
思っております(例として適当かどうか分かりませんが)


try
{
// 何かする
}
catch
{
value2 = "Error"
return value2;
}

もし、何かアドバイスを頂戴出来るようでしたら幸いです。
Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2009-02-19 22:53
引用:

「呼び出し元にエラーを返す」ということですが、例えば、こういう事をしたいと
思っております(例として適当かどうか分かりませんが)


try
{
// 何かする
}
catch
{
value2 = "Error"
return value2;
}


試してないということでしょうか?
それとも、試してできたけれど、この手法が問題ないのかという問いなのでしょうか?

構造的にはできるかもしれませんが、なんでもかんでもcatchして続ければ良いというわけでもありません。
AccessViolationExceptionとか起きた後に処理を続けてもあんまり良いことはなかったりしますし、例外次第では素直に落ちた方がいいこともあります。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-19 22:54
コード:
static void Main(string[] args)
{
    CallMethod1(out value1)
}

CallMethod1(out string value1)
{
    CallMethod2(out value2)
}

CallMethod2(out string value2)
{
    try
    {
    }
    catch (Exception ex)
    {
    }
} 


エラーを返したいとは
例外を返したいという事か、明示的にエラーコードの様な値を返したいかどちらでしょうか。
例外を返したいのであれば try catch しなければどんどん上位に伝播していきます。
エラーコードを返したいのであれば・・・
っていうか引数の out で返したいのでしょうか?
であれば catch の中で return じゃなくて out で返す変数に代入すればいいと思います。

でもこのコードってコンパイルしようとしてもエラー出まくりませんか?
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-19 22:59
書き込み進んでましたね・・・。
呼び出し元にエラーかどうかを返したいのであれば
コード:
static string CallMethod2()
{
    try
    {
        処理
        
        return "OK";
    }
    catch (Exception ex)
    {
        return "NG";
    }
} 


で良いんじゃないでしょうか。
ただ C# の基本的な事を知らないまま作ろうとしている様なので
勉強しても良いと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-02-20 07:18
「うまくいきませんでした」とは、

どの様なことを期待して、
どの様にコードを書いたところ(少し書いてあるけど、まだ曖昧)、
どの様な結果になった

のでしょうか?
かずい
常連さん
会議室デビュー日: 2008/09/30
投稿数: 28
お住まい・勤務地: 北海道札幌市
投稿日時: 2009-02-22 00:27
こんばんは、かずいです。

引用:

真夏のてるてるぼーずさんの書き込み (2009-02-19 22:49) より:

try
{
// 何かする
}
catch
{
value2 = "Error"
return value2;
}




ここでリターンした値を見て何か処理をしてプログラムを続行するのでしょうか?
それとも、リターンした後もキャッチしたいんでしょうか?
まずは、ココをはっきりさせないとピンポイントのアドバイスが出来ないかと・・・。
1

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