2008-10-09 20 views
1

J'ai un objet de la classe F. Je veux sortir le contenu de l'objet en utilisant Console.WriteLine pour les mises à jour d'état rapide et sale comme ceci:Quelle interface ou méthode ma classe doit-elle implémenter pour imprimer ce que je veux dans Console.WriteLine?

Console.WriteLine (objectF);

Ceci affiche seulement le nom de la classe à la console:

F 

Je veux surcharger ce en quelque sorte pour que je puisse au lieu d'imprimer des informations utiles sur l'objet et de ses propriétés.

J'ai une solution de contournement déjà: Pour surcharger la méthode ToString dans ma classe, puis appelez: Console.WriteLine (objectF.ToString());

Mais je préfère avoir la syntaxe plus simple. Des idées?

Répondre

6

Console.WriteLine (objectF)

devrait fonctionner, si vous surchargé ToString. Lorsque le framework doit convertir un objet en représentation sous forme de chaîne, il appelle ToString.

public override string ToString() 
{ 
    // replace the line below with your code 
    return base.ToString(); 
} 
1

Je continuerais à utiliser ToString(). C'est son but d'exister. En outre, sauf si vous avez une chaîne de format, vous pouvez simplement écrire:

Console.WriteLine(objectF) 
1

J'ai trouvé la cause de mon problème. J'avais négligé de définir mon implémentation de ToString() comme surcharger. La syntaxe correcte est:

public override string ToString() 
{ 
    ///Do stuff... 
    return string; 
} 

Merci aux affiches ci-dessous qui me mettre sur la bonne voie

2

Vous devez remplacer ToString() bien que dans certaines situations, vous pouvez juste trouver le code suivant utile:

public static class ObjectUtility 
{ 
    public static string ToDebug(this object obj) 
    { 
     if (obj == null) 
      return "<null>"; 

     var type = obj.GetType(); 
     var props = type.GetProperties(); 

     var sb = new StringBuilder(props.Length * 20 + type.Name.Length); 
     sb.Append(type.Name); 
     sb.Append("\r\n"); 

     foreach (var property in props) 
     { 
      if (!property.CanRead) 
       continue; 
      // AppendFormat defeats the point 
      sb.Append(property.Name); 
      sb.Append(": "); 
      sb.Append(property.GetValue(obj, null)); 
      sb.Append("\r\n"); 
     } 

     return sb.ToString(); 
    } 
} 

l'utilisation est d'inclure simplement l'espace de noms contenant ObjectUtility puis ...

var f = new F(); 
Console.WriteLine(f.ToDebug()); 

L'utilisation de réflexion ci-dessus n'est pas très bonne pour le code haute performance. Ne l'utilisez donc pas dans un scénario de production où une haute performance est souhaitée.