2009-08-07 8 views
1

Je cette classe/objet ci-dessous:C# | Linq | Subsonic - objet classe

public class Person 
{ 
    public string FirstName; 
    public string MI; 
    public string LastName; 
} 

Person p=new Person(); 
     p.FirstName = "Jeff"; 
     p.MI = "A"; 
     p.LastName = "Price"; 

Y at-il construit dans LINQ C# ou subsonique qui va créer une sortie de cette ?:

string myString = "FirstName=\"Jeff\" p.MI=\"A\" p.LastName=\"Price\""; 

Répondre

2

Il semble que vous ayez besoin d'une surcharge ToString en Person. En outre, ne pas exposer domaines publics comme ça. Utilisez properties.

public class Person 
    { 
     public string FirstName { get; set; } 
     public string MI { get; set; } 
     public string LastName { get; set; } 

     public override string ToString() 
     { 
      return "FirstName=\"" + FirstName + "\" p.MI=\"" + MI + "\" p.LastName=\"" + LastName + "\""; 
     } 
    } 

(modifier) ​​

Voici votre demande (mais il nécessite des propriétés):

public static class ObjectPrettyPrint 
    { 
     public static string ToString(object obj) 
     { 
      Type type = obj.GetType(); 
      PropertyInfo[] props = type.GetProperties(); 
      StringBuilder sb = new StringBuilder(); 
      foreach (var prop in props) 
      { 
       sb.Append(prop.Name); 
       sb.Append("=\""); 
       sb.Append(prop.GetValue(obj, null)); 
       sb.Append("\" "); 
      } 

      return sb.ToString(); 
     } 
    } 

Utilisation:

 Console.WriteLine(ObjectPrettyPrint.ToString(new Person { FirstName, = "A", MI = "B", LastName = "C" })); 
+0

Nice @ bruno, mais toujours en attente d'autres entrées –

+0

Voir la mise à jour de la réponse. –

+0

yup, essayant maintenant ... –

1

Eh bien, comme pour LINQ et C#, pas par défaut. Cependant, dans la classe Person, vous pouvez remplacer l'événement ToString() pour le faire pour vous.

public override string ToString() 
    { 
     return string.Format("p.Firstname={0} p.MI={1} p.LastName={2}", FirstName, MI, LastName); 
    } 

Et alors vous suffit d'appeler comme suit:

string myString = p.ToString(); 

Ce qui vous donnera la sortie que vous recherchez.

+0

Je suis un gars paresseux, le même code que Bruno ci-dessus. Je cherche maintenant une réflexion –

+0

Réflexion? Pourquoi dans le monde voudriez-vous faire cela si tout cela prend est une simple dérogation? –

+0

Je suis juste en train de pousser la limite ici, et votre idée de Brunos est simple et directe, c'est pourquoi je l'applique déjà en attendant d'autres réponses =) –