【问题标题】:C# Setting object DateTime property values through reflectionC#通过反射设置对象DateTime属性值
【发布时间】:2011-11-03 06:55:31
【问题描述】:

我想将对象的所有 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);
        }
    }
}

我在做/想什么根本不正确的事情吗?

【问题讨论】:

  • 通过反射而不是直接设置这些的原因是什么?如果您有很多需要设置的内容,可以考虑将它们放入列表或字典中。
  • 有什么理由避免使用 getter 返回具有默认日期的类 var 的标准属性?
  • 我尝试在多级继承噩梦中实现类似的功能,实现基于反射的自定义反序列化方法。表演太可怕了!您最好使用部分类并编写代码生成器。 (我的 0.02 美元)。
  • 我需要将所有 DateTime 属性设置为“标准”日期,因为它们所属的对象是 EF Code First 对象,这意味着:如果它们,我无法将 DateTime 属性保存到 SQL CE DB有一个 DateTime.MinValue (希望你明白我的意思......)

标签: c# .net reflection c#-4.0 system.reflection


【解决方案1】:

参数需要调整;第一个是 target - 我假设这里是thissecond 是值 (dt)。最后一个与“索引器”有关——这里可能不适用。

p.SetValue(this, dt, null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2018-02-07
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多