1

以下を使用して例外タイプをキャッチし、詳細を追加しています。

        try
        {
            this.ApplyRules();
            return base.SaveChanges();
        }
        catch (DbEntityValidationException ex)
        {
            var sb = new StringBuilder();

            foreach (var failure in ex.EntityValidationErrors)
            {
                sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
                foreach (var error in failure.ValidationErrors)
                {
                    sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                    sb.AppendLine();
                }
            }

            throw new DbEntityValidationException(
                "Entity Validation Failed - errors follow:\n" +
                sb.ToString(), ex
                ); // Add the original exception as the innerException
        }
        catch (Exception ex)
        {
            < some code here that would give me more detail about what the exception was >

            throw new Exception( );
        }

これは機能しますが、他のタイプの例外の innerException.exceptionMessage をキャッチできるようにしたいと考えています。

他のすべての例外タイプの最低レベルの innerException.exceptionMessage を含むコードをこれに追加する方法はありますか? 例外ツリーをたどって最終メッセージを取得するコードはありますか?

4

2 に答える 2

0

内部例外がなくなるまで、内部例外をループしてみることができます。

何かのようなもの

while (error != null)
{
     string doSomething = error.Message;
     error = error.InnerException;
}
于 2013-08-16T05:10:50.103 に答える
0

使用できます

while (ex.InnerException != null) ex = ex.InnerException;

更新

 catch (Exception ex)
        {
            while (ex.InnerException != null) ex = ex.InnerException;

            throw ex;
        }
于 2013-08-16T05:11:21.387 に答える