我有一個結構,有大量的命名布爾成員。 (爲了舉例,請留下良好的實踐和現在的考慮)。使用反射設置對象的所有布爾成員
我想將這些值隨機設置爲true或false,僅用於測試目的。
我該如何通過反射來做到這一點?
這是我到目前爲止有:
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);
}
不幸的是,它永遠不會進入循環。
UPDATE 1:
這裏是SystemState結構的樣子,這是狀態變量的類型。它充滿了布爾汽車的屬性。
public struct SystemState
{
...
public bool CanYouHelpMeOnThisOne { get; set; }
...
}
更新2:
貼在下面的解決方案似乎不錯,但它不工作。原因是SystemState是一個結構而不是類。因此,它是一個值類型而不是引用類型,因此調用SetValue方法不起作用。將SystemState更改爲類後,以下解決方案可以很好地工作。
現在有沒有其他的方式來實現這一點,而無需將SystemState更改爲類?
@horgh:假設他在那裏有一些'bool'成員。 –
只是一個方面說明:因爲你知道在編譯時你想設置'布爾'字段,所以我會使用'typeof(布爾)'而不是'false.GetType()'。 –