2013-07-19 2 views
8

je composais un type anonyme pour personne qui a le nom et la date de naissance en tant que propriétés:Accéder aux propriétés d'un type anonyme en C#?

var person = new{ Name = "Mike", BirthDate = new DateTime(1990, 9, 2) }; 

puis plus tard, a décidé d'ajouter une méthode qui renverra l'âge de la personne.

var person = new { Name = "Mike", 
        BirthDate = new DateTime(1990, 9, 2), 
        GetAge = new Func<int>(() => { return /* What? */; }) }; 

Comment accéder à la propriété BirthDate afin que je puisse calculer l'âge? J'ai essayé d'utiliser this mais bien sûr cela n'a pas fonctionné.

+1

Parce que les propriétés de type anonyme sont en lecture seule, je ne vois pas en faisant cela. Vous pouvez simplement utiliser 'new DateTime (1990, 9, 2)' directement dans l'implémentation de la propriété 'GetAge' et il n'y aura pas de différence. – MarcinJuraszek

+6

Vous ne pouvez pas, autant que je sache. –

+0

@MarcinJuraszek Je ne sais pas quand ni pourquoi, mais si je devais faire face à une situation dans le futur, que ferais-je? – dpp

Répondre

4

Vous ne pouvez pas. Vous devrez créer une classe Person d'avoir cette fonctionnalité:

class Person { 
     public string Name { get; set; } 
     public DateTime BirthDate { get; set; } 
     public TimeSpan Age { 
      get { 
       // calculate Age 
      } 
     } 
    } 

    var person = new Person { 
      Name = "Mike", 
      BirthDate = new DateTime(1990, 9, 2)) 
    }; 

Edit: Une autre option est de créer un extension method pour DateTime:

public static TimeSpan GetAge(this DateTime date) { 
     // calculate Age 
    } 

    var person = new { 
      Name = "Mike", 
      BirthDate = new DateTime(1990, 9, 2)) 
    }; 

    TimeSpan age = person.BirthDate.GetAge(); 
+0

+1 Ceci est une réponse solide ... – MoonKnight

+1

Je n'ai pas vraiment besoin d'un tutoriel sur la façon de déclarer une classe et les propriétés, j'étudie les types anonymes et les objets dynamiques. Néanmoins, j'apprécie l'aide de tout le monde. – dpp

+0

+1 pour la méthode d'extension. Bien que, il ajoutera également la méthode 'GetAge' à d'autres objets' DateTime'. – dpp

Questions connexes