2011-11-02 82 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