63 votes

Comment utiliser la méthode d'extension LINQPad Dump() dans Visual Studio ?

LINQPad est étonnant, et particulièrement utile est le Dump() qui rend les objets et les structures de presque tous les types, anonymes ou non, à la console.

Au départ, lorsque j'ai migré vers Visual Studio 2010, j'ai essayé de faire mes propres Dump en utilisant un délégué pour obtenir les valeurs à rendre pour les types anonymes, etc. Cela devient assez compliqué et, bien que ce soit amusant et éducatif au début, j'ai besoin d'une mise en œuvre solide. Après avoir vérifié le code LINQPad dans la section .NET Reflector Je suis encore plus sûr que je ne vais pas réussir la mise en œuvre.

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

13 votes

Cette question ne doit pas être classée parce qu'elle n'a pas suscité de débat, d'arguments, de sondage ou de discussion approfondie.

0 votes

Je vois la méthode dump dans linqpad d'ici:--- linqpad.net , --- i.imgur.com/7j2WdZw.png et je pense que c'est une méthode vraiment spéciale qui est utilisée dans linqpad, donc je ne pense pas qu'il y ait un moyen facile de le faire dans le vrai C#. Comme sa description, il pourrait automatiquement transformer l'image en image, le calendrier en calendrier, il doit y avoir beaucoup de décision de type d'objet dans le vrai code derrière.

0 votes

Et je jette un coup d'oeil à l'ObjectDumper, il utilise la méthode Write à la fin qui utilise la classe TextWriter, donc je pense que ce qu'il fait est simplement d'écrire tous les objets dans une chaîne peut-être pas ce que vous voulez.

68voto

Chad Ruppert Points 3073

J'ai écrit une méthode d'extension à Object qui utilise le sérialiseur Json.Net avec l'option pretty format. JSON est assez facile à lire lorsqu'il est formaté de cette façon. Il vous manque l'information sur le type, mais je ne sais pas si vous en avez besoin, surtout si l'on considère la simplicité de cette méthode. Je n'ai pas encore échoué. J'utilise Json.Net et non MS' parce qu'il a la capacité de gérer les références circulaires dans les graphiques complexes, ce que MS' ne peut pas faire, ou ne faisait pas au moment où j'y ai pensé.

using Newtonsoft.Json;

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

    public static T Dump<T>(this T value)
    {
        Console.WriteLine(value.ToPrettyString());
        return value;
    }
}

0 votes

Pour émuler davantage la méthode Dump() de LINQPad, ajoutez cette méthode d'extension à la classe : public static T Dump<T>(this T value) { Console.WriteLine(value.ToPrettyString()) ; return value ; }

1 votes

Si quelqu'un adapte ceci pour utiliser System.Text.Json malgré le raisonnement de cet article, le seul changement nécessaire en dehors des noms de classe/objet est de passer new JsonSerializerOptions(JsonSerializerDefaults.Web) { WriteIndented = true }; au lieu de Formatting.Indented à la Serialize méthode. WriteIndented = true fera un formatage similaire pour imprimer joliment la chaîne résultante.

37voto

Raj Kaimal Points 7133

Regardez ici (votre chemin peut varier) :

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

0 votes

+1 Classe très pratique. Je ne le savais pas. Je vais la copier dans ma bibliothèque d'outils de débogage. Merci

1 votes

Je l'ai compilé et ajouté comme référence à mon projet mais je reçois une erreur en essayant de construire - ObjectDumper n'existe pas dans le contexte actuel. Comment l'appelez-vous ? Est-ce que Write est une méthode d'extension ou juste un static. Désolé, je suis nouveau en C#.

13voto

Michael Freidgeim Points 4002

diceguyd30 's respuesta provient de une discussion (notamment les commentaires de Pat Kujawa et d'anunay) ) et décrit comment appeler l'implémentation du vidage LINQPad à partir 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;
}

1 votes

L'écrivain est IDisposable.

11voto

Thonander Points 51

Il y a aussi une bibliothèque de classes nommée ObjectDumper disponible sous forme de paquet NuGet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X