C#获取类型为bool的所有属性的值和名称

时间:2018-07-31 16:38:53

标签: c#

我正在尝试获取类型为bool的所有属性的名称和值,似乎可以正常工作,但获取的值错误。

这是我正在使用的代码:

signupItem.GetType().GetProperties()
    .Where(p => p.PropertyType == typeof(bool) && (bool) p.GetValue(signupItem, null))
    .Select(p => p.Name).ToList().ForEach(prop => {

    var value = (Boolean) signupItem.GetType()
    .GetProperty(prop).GetValue(signupItem, null);

    html = (value) ?
        html.Replace("{chkbox}", "<input type='checkbox' id='html' checked>") :
        html.Replace("{chkbox}", "<input type='checkbox' id='html'>");
    });

示例: 在这里-价值实现 Value should be true

但是在尝试将其分配给变量时显示为false。

Value shows as false

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

  1. 请勿使用.ForEach()
  2. 您应该在使用属性本身时选择每个属性的名称
  3. 每次迭代都使用相同的html值,因此第一个循环将替换所有{chkbox}值。

尝试一下:

var properties = signupItem.GetType()
                           .GetProperties()
                           .Where(p => p.PropertyType == typeof(bool)
                                    && (bool) p.GetValue(signupItem, null));


foreach (Property prop in properties) {
    // don't you already know this is true from the `Where` clause?
    var value = (Boolean) prop.GetValue(signupItem, null);

    // this only happens for the first item - for all other items "{chkbox}" will already be replaced.
    html = (value) ?
        html.Replace("{chkbox}", "<input type='checkbox' id='html' checked>") :
        html.Replace("{chkbox}", "<input type='checkbox' id='html'>");
}