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

これらを反射で直接設定する理由は何ですか?設定が必要なトンがあれば、それをリストや辞書に入れることを検討することができます。 –

+0

デフォルトの日付でクラスvarを返すゲッターで標準プロパティーを避ける理由はありますか? –

+0

私は、リフレクションに基づいたカスタムデシリアライズメソッドを実装する、マルチレベルの継承の悪夢で同様の機能を実行しようとしました。パフォーマンスはひどいです!部分クラスを使用し、コードジェネレーターを書く方がよいでしょう。 (私の$ 0.02)。 –

答えて

9

パラメータを調整する必要があります。最初はターゲットです - ここではthisとします。 第2のは値(dt)です。最後は「インデクサー」に関連しています。これはおそらくここでは当てはまりません。

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

それは動作します - それを愛する、ありがとう! :-) – Mike

関連する問題