2016-02-16 16 views
7

मेरे पास दृश्य स्टूडियो के साथ एक छोटा सा मुद्दा है। मैं एक विधि है कि एक CustomExceptionदेखें विस्तार खिड़की का विस्तार नहीं करता संग्रह गुण

फेंकता है, तो मैं कोड है कि आज़माएं/कैच में इस प्रणाली को बुलाती है मैं डिबगर

enter image description here

में अपवाद विवरण देख सकते हैं अगर मैं कोशिश हटाने लपेट/कैच मैं देख सकता हूँ "त्रुटियों" संपत्ति गणना = 4 है, लेकिन मैं त्रुटियों को नहीं देख सकता ...

enter image description here

इस उम्मीद है या यह एक बग है?
मैं vs2015 उद्यम और नेट का उपयोग कर रहा 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(); 

     } 
    } 
} 

पुनश्च
मैं "DebuggerDisplay" गुण का उपयोग कर अपनी समस्या का समाधान कर सकते हैं, मैं तो बस यही कारण है कि दृश्य स्टूडियो के रूप में की उम्मीद काम नहीं करता है सोच रहा हूँ एड

[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' वर्ग (के रूप में चिह्नित) नहीं है serializable: यह आप LINQ क्वेरी की गणना करने से पहले उसे फेंक की अनुमति देगा? –

+1

@UweKeim मुझे एक ही समस्या है, भले ही मैं इसे Serializable –

उत्तर

0

यह दृश्य स्टूडियो 2017 में ठीक काम करता है ...

0

मुझे लगता है कि किसी कारण से संकलक 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

के रूप में चिह्नित करता हूं, मैंने पहले सोचा था और आपके समाधान की कोशिश की थी। काम नहीं किया ... –

संबंधित मुद्दे