2011-11-02 121 views
7

我想將我的對象的所有DateTime屬性設置爲默認日期。但是,如果我嘗試通過反射設置值,我會得到異常:「對象與目標類型不匹配」。C#通過反射設置對象DateTime屬性值

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); 
     } 
    } 
} 

我在做/思考一些根本上不正確的東西?

+0

什麼是通過反射而不是直接設置它們的原因?如果你需要設置一個噸,你可以考慮把它們放在一個List或Dictionary中。 –

+0

任何理由避免使用getter返回類var與您的默認日期的標準屬性? –

+0

我曾嘗試在基於反射的自定義反序列化方法的多級繼承噩夢中執行類似的功能。表現很糟糕!你最好使用部分類並編寫一個代碼生成器。 (我的$ 0.02)。 –

回答

9

參數需要調整;第一個是目標 - 我認爲這裏是this; 是值(dt)。最後一個涉及「索引」 - 這可能不適用於此。

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

它的工作原理 - 愛它,謝謝! :-) – Mike