何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 591
  • 記事 - 18
  • コメント - 2182
  • トラックバック - 183
ニュース
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2009
サイト内検索
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

throw e;(へぼろっぱぁ)より:

定期的に各所ででてくるお話ですが throw e; はやめましょうね、ホントに。

まぁ、あれですよ。Try と入力すると、Catch が自動入力されるのが、そもそもの間違いなんです。

あれ?あれれれれ???

むはっ!!!勘弁してください→Visual Basic 言語リファレンス / Throw ステートメント

expression
必ず指定します。スローする例外に関する情報を指定します。

これですよ、これ。マイクロソフトの説明が、そもそも間違っているんですよorz

正しくは、こっち→Throw ステートメント (Visual Basic)

expression
必ず指定します。スローする例外に関する情報を指定します。Catch ステートメント内では省略可能です。

Catch ステートメント内では省略可能です。

Catch ステートメント内では省略可能です。

Catch ステートメント内では省略可能です。

なお、C# の方は、旧 MSDN ライブラリでもcatch 句に現在の例外オブジェクトを再びスローするときは省略されます。と書かれています。…なんか、変な日本語だけど、まぁ、よしとする。

………うわ!だめだぁ~~!!C# は、新 MSDN ライブラリの方がダメダメですよ!!→try-catch (C# リファレンス)

throw ステートメントは、catch ステートメントでキャッチされた例外を再びスローするために catch ブロックで使用できます。次に例を示します。

catch (InvalidCastException e)
{
    throw (e);    // Rethrowing exception e
}

パラメータのない catch 句で処理された例外を再スローする場合、引数のない throw ステートメントを使用します。次に例を示します。

catch
{
    throw;
}

『C# 言語仕様』の方には、ちゃんと書いてありますね。

8.9.5 The throw statement より:

A throw statement with no expression can be used only in a catch block, in which case that statement re-throws the exception that is currently being handled by that catch block.

ちょうどいいや。ここで宣伝。

新しい msdn ライブラリでは、各ページの下の方に「コミュニティ コンテンツ」というところがあります。このコミュニティ コンテンツは、Windows Live ID を持っている方なら誰でも、そのページの内容に関係のある事柄を書き込むことができます。
“関係のある事柄”といっても、「この意味がわからない。」「これって、具体的にどう使うの?」といった質問に関しては、MSDN フォーラム他でお尋ねください。
そういった質問ではなく、「ここ、誤訳でしょ。正しくは、こう!」とか、「ここでされている説明って、間違ってますよね。実際にはこう動きますよね。」とか、「これって、使い道があまりなさそうですが、こんな風に使ってください。」とか、「よく間違って使っている例を見ますが、こんな風に使いましょう。」など、他の人への提案を書き込んでください。

とはいえ、MVP を中心としたモデレータが、24時間態勢で(<おいっ!!)見回り、適切な誘導をしますので、感覚がつかめるまでは遠慮無く書き込んでください。


閑話休題


まぁ、ね。あれですよ。そもそもの原因は try と入力したら catch ブロックが挿入されることですよ。これが、finally だったら、誰も再スローしようなんて思わないのですから。

かつ、.NET Framework では「検査例外」は無いのですから、ほとんどの場合は try - finally で良いのです。いっそのこと、「try - catch 使うな。try - finally 使え。」ってことで、キャンペーン打ってみてはいかがでしょう?

投稿日時 : 2007年6月8日 22:07
コメント
  • # re: 「try - catch 使うなキャンペーン」とか言ってみる
    中博俊
    Posted @ 2007/06/08 23:04
    >かつ、.NET Framework では「検査例外」は無いのですから、

    いやそんなことはないですよ。
    ありますよん。
  • # re: 「try - catch 使うなキャンペーン」とか言ってみる
    虚蝉
    Posted @ 2007/06/09 9:07
    try…catchを一つ覚えで書きまくってます。。。
    なんか後々困りそうな気がしますけど^^
  • # re: 「try - catch 使うなキャンペーン」とか言ってみる
    R・田中一郎
    Posted @ 2007/06/09 19:40
    try して catch できるものは何も無いんですよね。
  • # re: 「try - catch 使うなキャンペーン」とか言ってみる
    シャノン
    Posted @ 2007/06/10 2:33
    > ありますよん。

    詳細きぼん。
  • # re: 「try - catch 使うなキャンペーン」とか言ってみる
    Jitta
    Posted @ 2007/06/10 20:45
    ApplicationException を継承して、そのように使うってのはありですね。


    > try…catchを一つ覚えで書きまくってます。。。
     キーパー以外はハンドで反則ですよ(by NAL-6295さん)。
  • # re: 「try - catch 使うなキャンペーン」とか言ってみる
    通りすがり
    Posted @ 2007/06/11 10:12
    >ApplicationException を継承して、そのように使うってのはありですね。

    独自例外はExceptionクラスを継承して作った方がよいですよ。
    ApplicationExceptionはアプリケーション用例外の基底クラスなのに
    .NET Frameworkクラスライブラリ内に派生クラスがあるため使い物になりません。

    http://msdn2.microsoft.com/ja-jp/library/kw9wwk34(VS.80).aspx

    書籍「プログラミング Microsoft .NET Framework」に指摘があります。
  • # re: 「try - catch 使うなキャンペーン」とか言ってみる
    Jitta
    Posted @ 2007/06/11 21:51
    通りすがりさん、ありがとうございます。

    > ApplicationExceptionはアプリケーション用例外の基底クラスなのに
    > .NET Frameworkクラスライブラリ内に派生クラスがあるため使い物になりません。
    ぐはっ!!なんてこったい!!
    http://msdn2.microsoft.com/ja-jp/library/system.exception(VS.80).aspx
    [blockquote]
    Exception 基本クラスには例外の 2 つのカテゴリがあります。
     ・SystemException から派生する定義済み共通言語ランタイム例外クラス。
     ・ApplicationException から派生するユーザー定義のアプリケーション例外クラス。
    [/blockquote]

    んじゃ、訂正。ApplicationException から派生して、そのアプリケーションで使う「検査例外」のための派生もと例外クラスを作る。(こだわるかっ!)
    まぁ、「ワンクッション置く」ってことで。
タイトル  
名前  
Url
コメント