2016年10月18日火曜日

【C#】例外キャッチ時の各メソッド・プロパティの文字列

C#で例外発生時にログファイルへ書き込む場合、e.ToString(),e.Message,…どのプロパティ・メソッドを使うべきか?それぞれのエラーメッセージを実際に動かして確認する。
◆結論
当然状況次第で必要なものを選択する必要がある。
ただ、通常はe.ToString()でいいと思われる。自作の例外は、場合によって、e.Messageでもいいかも。

◆メインコード①(InnerException無し)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExCatchStr
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int zero = 0;
                int tmp = 0 / zero;
            }
            catch (Exception e)
            {
                var str = e.Message;  // ★★★ この行を変更する
                Console.WriteLine(str);
            }
            Console.ReadKey();
        }
    }
}

◆結果
No コード 結果 時間
1 e.Message 0 で除算しようとしました。
2 e.Source
(namespaceが出てる?)
ExCatchStr
3 e.StackTrace 場所 ExCatchStr.Program.Main(String[] args) 場所 c:\users\owner\documents\visual studio 2015\Projects\ExCatchStr\ExCatchStr\Program.cs:行 16
4 e.Data System.Collections.ListDictionaryInternal
5 e.InnerException
(コンソール上は空だが、nullが返されている)
6 e.HResult -2147352558
7 e.TargetSite Void Main(System.String[])
8 e.ToString() System.DivideByZeroException: 0 で除算しようとしました。
場所 ExCatchStr.Program.Main(String[] args) 場所 c:\users\owner\documents\visual studio 2015\Projects\ExCatchStr\ExCatchStr\Program.cs:行 16
9 e.ToString().Replace(
Environment.NewLine, "")
System.DivideByZeroException: 0 で除算しようとしました。 場所 ExCatchStr.Program.Main(String[] args) 場所 c:\users\owner\documents\visual studio 2015\Projects\ExCatchStr\ExCatchStr\Program.cs:行 16

◆メインコード②(InnerException有り)
いずれ確認予定。

◆実行環境
 ■VMware WorkStation10上の仮想マシン
  ・CPU:2
  ・メモリ:2GB
  ・OS:Windows7
  ・MSVS ver:Visual Studio 2015 Community

 ■ホストPCの性能(参考)
  ・CPU:Intel Core i5-4250U
  ・メモリ:8GB
  ・ドライブ:SSD(Plextor PX-512M3P)
  ・OS:Windows10

0 件のコメント:

コメントを投稿