2011-11-02 33 views
7

Tôi muốn đặt tất cả các thuộc tính DateTime của đối tượng của tôi thành một ngày mặc định. Tuy nhiên, nếu tôi cố gắng thiết lập các giá trị thông qua phản xạ, tôi nhận được ngoại lệ: "Đối tượng không khớp với loại mục tiêu".C# Đặt đối tượng Giá trị thuộc tính DateTime thông qua sự phản chiếu

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

Tôi có đang/đang nghĩ gì đó không chính xác về cơ bản không?

+0

Lý do để thiết lập thông qua phản ánh thay vì trực tiếp là gì? Nếu bạn có một tấn mà cần phải được thiết lập, bạn có thể xem xét việc đưa chúng vào một danh sách hoặc một từ điển. –

+0

Bất kỳ lý do gì để tránh các thuộc tính tiêu chuẩn với một getter trả về một lớp var với ngày mặc định của bạn? –

+0

Tôi đã cố gắng thực hiện chức năng tương tự trong một cơn ác mộng thừa kế đa cấp thực hiện một phương pháp deserialization tùy chỉnh dựa trên sự phản ánh. Hiệu suất là khủng khiếp! Bạn nên sử dụng các lớp học một phần và viết trình tạo mã. ($ 0,02 của tôi). –

Trả lời

9

Thông số cần điều chỉnh; mục đầu tiên là mục tiêu - mà tôi giả định là this tại đây; số giây thứ hai là giá trị (dt). Điều cuối cùng liên quan đến "người lập chỉ mục" - có thể không áp dụng ở đây.

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

nó hoạt động - yêu nó, cảm ơn! :-) – Mike

Các vấn đề liên quan