例外処理
モチベーションも大事だと思うので覚書として使用します。
感想
それだけのエラー数毎の作成は骨が折れると思いました。
端折ってばかりですが…DB扱う際実践的にやっていこうと思います。理想はサクッと仕様だけメモって自作出来ればいいけど、なかなかうまく行かない☂
モチベも落ちたので一旦切り替えて年内は通訳関係の事業計画書製作に専念したいと思います。
例外処理
例外が投げられた(発生した)時に行う処理です。
分岐としても使えますが重いので普通は使いません。
初期プログラミング界では大半がこの例外処理だったそうです。
(その時代じゃなくてよかった…)
以前行った既定値外例外処理コード
// 既定値外
int numOfTesters = exNo;
// 文字は代入されずwhileへ、既定値外は代入されwhileへ、既定値は代入されwhileパス
if (int.TryParse(Console.ReadLine(), out var nType))
{ numOfTesters = nType; }
while (numOfTesters < 0)
{
Console.Write("retype. ");
if (int.TryParse(Console.ReadLine(), out nType))
numOfTesters = nType;
}
このように、例外を処理できます。if while
で既定値以外の既定値外と文字を処理してループにしました
例外処理用の構文
1.try catch
例外処理の定番、try{例外123...} catch{処理}
またcatch
にwhen
付けれるようなった(例外処理同じならまとめてcatch)
catch (Exception e) when (e is ArgumentNullException || e is ArgumentOutOfRangeException)
事前知識:
using System.IO; //読み書き
Console.WriteLine(strmRdr.ReadToEnd()); //内容をすべて読み込む
strmRdr.Close(); ////.ReadToEnd後関連付けられたすべてのシステムリソースを解放
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
基本的なコード例をここに示します
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
Console.Write ("fileパス指定 ");
StreamReader strmRdr = new StreamReader(Console.ReadLine());
Console.WriteLine(strmRdr.ReadToEnd()); //内容をすべて読み込む
strmRdr.Close(); ////.ReadToEnd後関連付けられたすべてのシステムリソースを解放
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
try catchせずパス間違った場合エラー
using System;
using System.IO;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Console.Write ("fileパス指定 ");
StreamReader strmRdr = new StreamReader(Console.ReadLine());
Console.WriteLine(strmRdr.ReadToEnd()); //内容をすべて読み込む
strmRdr.Close(); ////.ReadToEnd後関連付けられたすべてのシステムリソースを解放
}
}
}
このように、try
catch
でファイルが存在しない場合のエラーを処理できました
2.Exception class/member
Exception classは、例外メッセージを取得するライブラリです。
使用する際はシリアル化(エラーメッセージや設定ファイルの転送や保存)するといい。
主なExceptionクラスとメンバ Best 5
catch(FileNotFoundException ex){//存在しないファイル}
catch(NullReferenceException ex){//nullのオブジェクトを操作した}
catch(DivideByZeroException ex){//0による除算}
catch(IndexOutOfRangeException ex){//配列境界こえた}
catch(Exception ex){//その他の例外}
{Console.WriteLine(ex.Message);}//例外に関するメッセージ
{Console.WriteLine(ex.Source);}//発生源のアプリやファイル名
{Console.WriteLine(ex.HelpLink);}//その例外に関するヘルプリンク
{Console.WriteLine(ex.StackTrace);}//処理メソッド説明(デバッグ情報でスタックトレース(スタックの追跡))
{Console.WriteLine(ex.TargetSite);}//例外発生した部分表示
//1つの処理で複数例外でる場合、throwで別のメソッドに再スローすればいい
//逆に複数処理で1つの例外でる場合、whenでまとめればいい
memo: いずれ学習する他の例外処理
async,await,Await in catch and finally blocks
Author And Source
この問題について(例外処理), 我々は、より多くの情報をここで見つけました https://qiita.com/h_okabe/items/dabfa30711069661ddb4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .