2010-04-23 4 views
45

LINQPad est incroyable, et particulièrement utile est les méthodes d'extension Dump() qui rend des objets et des structs de presque n'importe quel type, anonyme ou non, à la console. Au début, lorsque je suis passé à Visual Studio 2010, j'ai essayé de créer ma propre méthode Dump à l'aide d'un délégué pour obtenir les valeurs à afficher pour les types anonymes, etc. Cela devient plutôt compliqué et c'était amusant et éducatif D'abord, j'ai besoin d'une mise en œuvre solide. Après avoir vérifié le code LINQPad dans .NET Reflector, je suis encore plus assuré que je ne vais pas obtenir la bonne mise en œuvre.Comment utiliser la méthode d'extension LINQPad Dump() dans Visual Studio?

Y a-t-il une bibliothèque gratuite que je peux inclure pour fournir la fonctionnalité Dump?

+6

cette question ne doit pas être fermé car il n'a pas sollicité le débat, les arguments , interrogation, ou discussion étendue –

+0

Je vois la méthode de vidage dans linqpad d'ici: --- https://www.linqpad.net, --- http://i.imgur.com/7j2WdZw.png et je pense que c'est une méthode vraiment spéciale utilisée dans linqpad, donc je ne pense pas qu'il existe un moyen facile de le faire en vrai C#. comme son decription il pourrait automatiquement tourner img à img, calendrier au calendrier, il doit y avoir beaucoup de décision de type d'objet dans le vrai code derrière –

+0

et je jette un coup d'oeil au ObjectDumper, il emploie la méthode d'écriture à la fin qui emploie la classe TextWriter , donc je pense que ce qu'il fait est simplement écrire tout l'objet à la chaîne peut-être pas faire ce que vous voulez. –

Répondre

34

Regardez ici (votre chemin peut varier):

C: \ Program Files (x86) \ Microsoft Visual Studio \ 10.0 Samples \ 1033 \ CSharpSamples.zip \ LinqSamples \ ObjectDumper

+0

+1 Très pratique. Je n'ai jamais su à ce sujet. Je vais le copier dans ma bibliothèque d'outils de débogage. Merci –

+0

Je l'ai compilé et ajouté comme référence à mon projet mais j'obtiens une erreur en essayant de construire - ObjectDumper n'existe pas dans le contexte actuel. Comment l'appellerais-tu? Est-ce que Write est une méthode d'extension ou simplement une statique. Désolé, je suis nouveau à C#. – gav

47

j'ai écrit une extension méthode à Object qui utilise le sérialiseur Json.Net avec l'option pretty format. JSON est assez facile à lire lorsqu'il est formaté comme ça. Vous manquez des informations de type, mais je ne sais pas si vous en avez besoin, surtout si l'on considère à quel point c'est facile. Ne m'a pas encore échoué. J'utilise Json.Net et non MS 'parce qu'il a la capacité de gérer des références circulaires dans des graphes complexes, où MS' ne peut pas, ou n'a pas au moment où je pensais à cela.

using Newtonsoft.Json; 
    public static class Dumper{ 
     public static string ToPrettyString(this object value) 
     { 
      return JsonConvert.SerializeObject(value, Formatting.Indented); 
     } 
    } 
+0

cela semble excellent. Merci. Je vais essayer ça – kobi7

+0

Grande réponse. Je n'ai jamais pensé utiliser json ... – Paul

+1

Merci pour ça! J'étais sur le point de coller la version VB de ça mais ça ressemble à de la foutaise dans les commentaires. – Colin

8

diceguyd30 « s answer provient a discussion (especially Pat Kujawa's & anunay's comments) et décrit comment appeler la mise en œuvre de vidage de LINQPad de C# et VB.NET:

public static string DumpToHtmlString<T>(this T objectToSerialize) 
{ 
    string strHTML = ""; 
    try 
    { 
     var writer = LINQPad.Util.CreateXhtmlWriter(true); 
     writer.Write(objectToSerialize); 
     strHTML = writer.ToString(); 
    } 
    catch (Exception exc) 
    { 
     Debug.Assert(false, "Investigate why ?" + exc); 
    } 
    return strHTML; 
} 
+0

Génial, merci. Travaillé parfaitement. –

+0

L'auteur est IDisposable. – Tormod

Questions connexes