C# 通过反射设置对象的 DateTime 属性值

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

我是否在做/思考某些基本错误的事情?


通过反射设置这些属性的原因是什么,而不是直接设置?如果您有大量需要设置的属性,可以考虑将它们放入列表或字典中。 - Joel Beckham
有什么理由避免使用带有getter的标准属性,该getter返回一个具有默认日期的类变量? - Aaron McIver
我曾试图在多级继承的噩梦中实现类似的功能,采用基于反射的自定义反序列化方法。性能非常糟糕!最好使用部分类和编写代码生成器(我的意见)。 - Wesley Long
我需要将所有的DateTime属性设置为“标准”日期,因为它们所属的对象是一个EF Code First对象,这意味着:如果它们具有DateTime.MinValue(希望你明白我的意思...),我无法将DateTime属性保存到SQL CE DB中。 - Mike
1个回答

9

参数需要调整;第一个是目标 - 我认为这里是this; 第二个是值 (dt)。最后与“索引器”有关 - 这可能不适用于此处。

p.SetValue(this, dt, null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接