2011-11-02 13 views
7

Chcę ustawić wszystkie właściwości DateTime mojego obiektu na datę domyślną. Jeśli jednak spróbuję ustawić wartości poprzez odbicie, otrzymam wyjątek: "Obiekt nie pasuje do typu celu".C# Ustawienie obiektu DateTime wartości właściwości poprzez odbicie

private void SetDefaultValues() 
{ 
    DateTime dt = DateTime.Parse("1/1/2000", new CultureInfo("en-US", true)); 
    foreach (PropertyInfo p in this.GetType().GetProperties()) 
    { 
     if (p.PropertyType.FullName == "System.DateTime") 
     {          
      p.SetValue(dt, typeof(DateTime), null); 
     } 
    } 
} 

Czy robię/myślę o czymś fundamentalnie niepoprawnym?

+0

Jaki jest powód ich ustawiania poprzez odbicie zamiast bezpośrednio? Jeśli masz tonę, którą trzeba ustawić, możesz rozważyć umieszczenie jej na Liście lub Słowniku. –

+0

Każdy powód, aby unikać standardowych właściwości z geterem zwracającym klasę var z domyślną datą? –

+0

Próbowałem wykonać podobną funkcjonalność w wielopoziomowym koszmarze dziedziczenia implementując niestandardową metodę deserializacji w oparciu o odbicie. Występ jest okropny! Lepiej korzystaj z klas częściowych i pisania generatora kodu. (moje 0,02 USD). –

Odpowiedz

9

Parametry wymagają regulacji; pierwszy to cel - który zakładam tutaj:; sekund jest wartością (dt). Ostatni odnosi się do "indeksatorów" - co prawdopodobnie nie ma tu zastosowania.

p.SetValue(this, dt, null); 
+0

to działa - kocham to, dzięki! :-) – Mike

Powiązane problemy