Tôi có một cấu trúc có một tấn các thành viên bool có tên. (Xin vui lòng để lại thực hành tốt và như vậy xem xét bây giờ vì lợi ích của ví dụ).Thiết lập tất cả các thành viên bool của một đối tượng sử dụng sự phản chiếu
Tôi muốn đặt ngẫu nhiên các giá trị này thành giá trị đúng hoặc sai, chỉ cho mục đích thử nghiệm.
Tôi làm cách nào để thực hiện điều này thông qua phản ánh?
Đây là những gì tôi có cho đến nay:
Random r = new Random();
foreach (var bool_field in state.GetType().GetFields().Where(x => x.GetType() == false.GetType()))
{
bool_field.SetValue(state, r.Next() % 2 == 0 ? true : false);
}
Thật không may, nó không bao giờ đi vào vòng lặp.
UPDATE 1:
Sau đây là cách các struct SystemState trông như thế nào, đó là loại của biến nhà nước. Nó được làm đầy với các thuộc tính tự động bool.
public struct SystemState
{
...
public bool CanYouHelpMeOnThisOne { get; set; }
...
}
UPDATE 2:
Giải pháp đăng tải dưới đây có vẻ tốt đẹp, nhưng nó không hoạt động. Lý do là SystemState là một cấu trúc không phải là một lớp. Vì nó là một kiểu giá trị không phải là một kiểu tham chiếu, do đó, gọi phương thức SetValue không có hiệu lực. Sau khi thay đổi SystemState thành lớp, giải pháp dưới đây hoạt động hoàn hảo.
Bây giờ có cách nào khác, để đạt được điều này mà không thay đổi SystemState thành lớp không?
@horgh: Giả sử anh ta có một số thành viên 'bool' trong đó. –
Chỉ cần một lưu ý: Vì bạn biết tại thời gian biên dịch mà bạn muốn thiết lập các trường 'Boolean', tôi sẽ sử dụng' typeof (Boolean) 'thay vì' false.GetType() '. –