c# – 使用反射设置对象的所有bool成员
我有一个结构,有很多名为bool的成员. (请为此示例留下良好做法,现在不考虑这些做法).
我想将这些值随机设置为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); } 不幸的是,它永远不会进入循环. 更新1: 以下是SystemState结构的外观,它是状态变量的类型.它充满了bool汽车属性. public struct SystemState { ... public bool CanYouHelpMeOnThisOne { get; set; } ... } 更新2: 下面发布的解决方案似乎很好,但它不起作用.原因是SystemState是一个结构而不是一个类.因此,它是Value类型而不是Reference类型,因此调用SetValue方法无效.将SystemState更改为class后,以下解决方案完美运行. 现在有没有其他方法,在不将SystemState更改为类的情况下实现此目的? 解决方法
首先,您需要更改Where子句:
x => x.FieldType == false.GetType() 由于x的类型是FieldInfo 自上次OP编辑以来,它不是字段,而是属性.因此,您应该使用 foreach (var bool_field in state.GetType() .GetProperties() .Where(x => x.PropertyType == false.GetType())) { bool_field.SetValue(state,r.Next() % 2 == 0 ? true : false,null); } 根据OP的注释,如果您确实想要访问支持字段,可以使用以下代码: var fs = state.GetType() .GetFields(BindingFlags.Instance | BindingFlags.NonPublic) .Where(x => x.FieldType == typeof(bool)); foreach (var f in fs) { f.SetValue(state,true); } 不带参数的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |