質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

5809閲覧

C# ソケット エラーコードの取り扱い

退会済みユーザー

退会済みユーザー

総合スコア0

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/04/06 03:00

編集2018/04/09 00:56

C# についての質問です。

try catch にて例外を取得しているのですが、キャッチした例外ごとに処理を変えたいです。
具体的には、エラーメッセージをそれぞれ変えたいだけなのですが、、、

C#

1catch (Exception exept) 2{ 3 //ここにif(キャッチしたエラーコード) 4  MessageBox.Show(exept.Message); 5}

のようにしたいです。
よろしくお願いいたします。

追記
エラーコードの詳細
->今回は 

WSAEINTR (10004)
意味 : 関数呼び出しに割り込みがありました。
説明 : ブロック操作は WSACancelBlockingCall の呼び出しによって中断されました。

このエラーに対して対応したいと考えております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

g_uo

2018/04/06 07:01

エラーコードとは何のことを指していますか?
退会済みユーザー

退会済みユーザー

2018/04/06 08:44

追記いたしました。よろしくお願いいたします。
guest

回答3

0

catchの中でIF文が使えないわけではないですが、キャッチした例外の型に定義されているエラーコードプロパティを参照したいということでしょうか。
そうでしたら、catch の対象の型を Exception からその対象の型に変更してください。

C#

1catch (WebException exept) 2{ 3 if ( exept.Status ==) 4 { 5  MessageBox.Show(exept.Message); 6 } 7}

C#6.0以降でしたら、例外フィルタを使ってキャッチするかどうかを制御できます。

C#

1catch (Exception exept) when (条件句) 2{ 3 //ここにif(キャッチしたエラーコード) 4  MessageBox.Show(exept.Message); 5}

投稿2018/04/06 03:25

masa_n

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/06 04:04

コメントありがとうございます! 例外フィルタなるものがあったのですね! とても便利で勉強になりました。 あと一つだけ、 if の()内に書くときにエラーコードを条件式に書くときの書式が調べても出てこなかったので、 教えていただきたいです。。 よろしくお願いします。
guest

0

ベストアンサー

こんにちは。追記された内容からSocket関連のコーディングを行っているものと想定します。
間違ってたらご指摘ください。

ExceptionでcatchするのではなくSocketExceptionでcatchします。

SocketException クラス

csharp

1 2// エラーコードをあらかじめ定数で定義しておくとよいかもしれません 3private const int WSAEINTR = 10004; 4private const int WSAEACCES = 10013; 5private const int WSAEFAULT = 10014; 6 7 8try 9{ 10 11 // 処理 12 13} 14catch ( SocketException socketEx ) 15{ 16 17 // SocketException の ErrorCode プロパティを確認します 18 if ( socketEx.ErrorCode == WSAEINTR) 19 { 20 MessageBox.Show("説明 : ブロック操作は WSACancelBlockingCall の呼び出しによって中断されました。"); 21 } 22 23 // また、エラーコードでメッセージを変えるという趣旨を含めるならswitch文のほうがいいかもしれません 24 switch ( socketEx.ErrorCode ) 25 { 26 case WSAEINTR: 27 MessageBox.Show("説明 : ブロック操作は WSACancelBlockingCall の呼び出しによって中断されました。"); 28 break; 29 case WSAEACCES: 30 MessageBox.Show("メッセージ"); 31 break; 32 default: 33 break; 34 } 35}

エラーコードはここを参考にしました。
Windows ソケットのエラー コード、値、および意味

お力になれれば幸いです。

投稿2018/04/06 09:05

g_uo

総合スコア212

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/06 13:28

ありがとうございます! ソッコーで解決しました!! まさに期待していた通りの動きが実現できました。 本当にありがとうございます
g_uo

2018/04/07 08:00

お返事ありがとうございます。お力になれてうれしいです。 変えられるのかわかりませんがもし可能であれば、質問のタイトルを「C# ソケット エラーコードの取り扱い」などに変更すると、同様に困っている方がこの質問にたどり着きやすくなると思います。
退会済みユーザー

退会済みユーザー

2018/04/09 00:57

ありがとうございます! タイトル変えました。 自分のように困っている方々にも情報の共有を早くできるようにもっと頑張ります!!
g_uo

2018/04/09 01:10

タイトルの変更、ありがとうございました :)
guest

0

try-catch (C# リファレンス)こちらが参考になるかと

投稿2018/04/06 03:25

YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/06 04:07

とても速いお返事ありがとうございます! 今回の質問の件はいろいろなパターンがありそうなので、 いろいろ検討してみます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問