2013-07-19 5 views
8

Dire ho creato un tipo anonimo a persona che ha nome e data di nascita come proprietà:Accesso alle proprietà di un tipo anonimo in C#?

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

poi in seguito, ha deciso di aggiungere un metodo che restituirà l'età della persona.

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

Come posso accedere alla proprietà BirthDate in modo che possa calcolare l'età? Ho provato a utilizzare this ma ovviamente non ha funzionato.

+1

Poiché le proprietà tipo anonimo sono di sola lettura non vedo alcun punto nel farlo. Puoi semplicemente usare 'new DateTime (1990, 9, 2)' direttamente all'interno dell'implementazione della proprietà 'GetAge' e non ci saranno differenze. – MarcinJuraszek

+6

Non puoi, per quanto ne so. –

+0

@MarcinJuraszek Non so quando o perché, ma se presentassi una situazione futura in cui dovrei fare questo, cosa dovrei fare? – dpp

risposta

4

Non è possibile. Si dovrà creare una classe Person ad avere tale funzionalità:

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: Un'altra opzione è quella di creare un extension method per 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 Questa è una risposta solida ... – MoonKnight

+1

Non ho davvero bisogno di un tutorial su come dichiarare una classe e le proprietà, sto studiando i tipi anonimi e gli oggetti dinamici. Tuttavia, apprezzo l'aiuto di tutti. – dpp

+0

+1 per il metodo di estensione. Sebbene, aggiungerà anche il metodo 'GetAge' ad altri oggetti' DateTime'. – dpp