2016-02-16 17 views
7

私はVisual Studioで小さな問題があります。 私はCustomException詳細を表示するウィンドウは展開されませんコレクションのプロパティ

をスローするメソッドを持っている私は、私は試して削除した場合、私は、デバッガ

enter image description here

に例外の詳細を見ることができるのtry/catchでこのメソッドを呼び出すコードをラップする場合/キャッチ私は

enter image description here

が、これが期待されているか、それはバグですが、私はエラーを見ることができない...「エラー」プロパティが= 4をカウントしていることがわかりますか?
私はあなたが簡単にそれを再現することができますvs2015企業と.NET 4.5.2

を使用しています:
1)この

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace ClassLibrary1 
{ 
    public static class Class1 
    { 
     public static void DoSomethingThatThrowsException() 
     { 
      throw new MyException(Enumerable.Range(1, 4).Select(e => new MyError() { Message = "error " + e.ToString() }).ToList()); 
     } 
    } 

    public class MyException : Exception 
    { 
     public IEnumerable<MyError> errors { get; set; } 
     public MyException(IEnumerable<MyError> theErrors) { errors = theErrors; } 
    } 
    public class MyError { public string Message { get; set; } } 
} 

2でクラスライブラリを作成します。)これでコンソールアプリケーションを作成します。

using ClassLibrary1; 

namespace ConsoleApplicationException 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       Class1.DoSomethingThatThrowsException(); 
      } 
      catch (MyException ex) 
      { 
       //Here I can expand ex.errors; 
      } 

      //Here I can see that Count=4 but I cannot see the errors... 
      Class1.DoSomethingThatThrowsException(); 

     } 
    } 
} 

PS
私は「DebuggerDisplay」属性を使用して私の問題を解決することができますVisual Studioが期待通りに動作しない理由を、私は思ったんだけど
更新

[DebuggerDisplay("FullDetails = {FullDetails}")] 
public class MyException : Exception 
{ 
    public IEnumerable<MyError> errors { get; set; } 
    public MyException(IEnumerable<MyError> theErrors) { errors = theErrors;   } 
    public string FullDetails { get { return string.Join(",", errors.Select(e => e.Message)); } } 
} 

エド私は配列への私のリストを変更した場合、私は同じ問題を抱えているが、私は辞書に変更した場合、私は、最初のレコードを見ることができます!

+0

たぶん 'MyError'クラスではない、シリアライズ(印)? –

+1

@UweKeim私はSerializableとしてマークしても同じ問題を抱えています –

答えて

0

これは、Visual Studio 2017で正常に動作します...

0

何らかの理由でコンパイラが投げたときにLINQクエリを評価できないとします。作成してから投げてください。それはあなたがそれを投げる前に、LINQクエリを計算することができます:

public static void DoSomethingThatThrowsException() 
{ 
    var ex = new MyException(Enumerable.Range(1, 4) 
           .Select(e => new MyError() 
              { 
               Message = "error " + e.ToString() 
              }) 
           .ToList()); 
    throw ex; 
} 
+0

これは私が最初に思ったことであり、あなたの解決策を試しました.Didn't work ... –

関連する問題