当属性的名称出现在另一个数组中时,为该属性分配bool值

本文关键字:属性 分配 bool 另一个 数组 | 更新日期: 2023-09-27 18:08:42

这是我能做的最好的问题陈述。

情况如下:

我有一个字符串"InputValues",其中包含逗号分隔格式的值:chkAwareness1、chkAwareness2 chkAwareness6、chkAwareness9 chkAwareness13…

如果名称与上面的字符串变量匹配,则需要用bool值填充对象。

的例子:如果InputValues包含"chkAwareness1",则"public bool chkAwareness1"应设置为true,否则为false。

 public class SurveyCheckBox
    {
        public bool chkAwareness1 { get; set; }
        public bool chkAwareness2 { get; set; }
        public bool chkAwareness3 { get; set; }
        public bool chkAwareness4 { get; set; }
        public bool chkAwareness5 { get; set; }
        public bool chkAwareness6 { get; set; }
        public bool chkAwareness7 { get; set; }
                      .
                      .
                      .
   }
public void createObjectSurveyCheckBox(string InputValues)
{
    string[] ChkValues = InputValues.Split(',');
    SurveyCheckBox surveyChkBoxObj = new SurveyCheckBox();
    for (int i = 0; i < NumberOfPropertyInSurveyCheckBox ;i++ )
    { 
        // typeof(SurveyCheckBox).GetProperties()[i].Name
    }
}

我搜索了,我找到了GetProperties方法,通过它我可以获得属性的名称,但我无法找出逻辑。如何搜索值并将其分配给bool属性。

请帮。

当属性的名称出现在另一个数组中时,为该属性分配bool值

你很接近了。你只需要改变你的循环,真的。整个方法应该是这样的:

public void CreateObjectSurveyCheckBox(string inputValues)
{
    string[] chkValues = inputValues.Split(',');
    SurveyCheckBox surveyChkBoxObj = new SurveyCheckBox();
    foreach (string value in chkValues)
    {
        PropertyInfo propInfo = typeof(SurveyCheckBox).GetProperty(value);
        if (propInfo != null)
            propInfo.SetValue(surveyChkBoxObj, true);
    }
}

注:你会注意到我冒昧地把你的大写改为更标准的东西。如果你像以前那样使用大写,你可能会被"私刑"。

我同意Tim的观点;我不会在产品代码中使用这样的东西。

    public void createObjectSurveyCheckBox(string InputValues)
    {
        var instance = new SurveyCheckBox();
        foreach (var property in typeof(SurveyCheckBox).GetProperties().Where(x => x.Name.Contains("chkAwareness")))
        {
            if (InputValues.Contains(property.Name))
                property.SetValue(instance, true);
        }
    }

我会从另一个方向编写循环,从0到MaxchkAwareness;在进入循环之前,先对输入进行排序。你还需要一个索引到你的输入数组(ChkValues)的下一个项目,让我们调用chkValueIndex;如果输入数组中的下一项ChkValues[chkValueIndex]是"chkAwareness"+i。然后属性为真,数组指针自增。否则你的属性为假。但我认为你必须使用反射来设置循环中的属性,像这样:使用反射获取属性引用

我相信有更好的方法来重组它,并做得完全不同,但在我看来,你是在尽你所能地利用给你的系统。

你可以试试:

public static void createObjectSurveyCheckBox(string InputValues)
{
    string[] ChkValues = InputValues.Split(',');
    SurveyCheckBox surveyChkBoxObj = new SurveyCheckBox();
    foreach (var prop in typeof(SurveyCheckBox).GetProperties())
    {
        if (ChkValues.Contains(prop.Name))
            prop.SetValue(surveyChkBoxObj, true);
    }
}