当另一个数组中存在该属性的名称时,将bool值分配给属性

时间:2016-09-23 14:47:23

标签: c#

我最好能提出问题陈述。请善待。

情况如下:

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

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

示例 如果InputValues包含" chkAwareness1"然后"公共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属性。

请帮忙。

4 个答案:

答案 0 :(得分:2)

你非常接近。你只需要改变你的循环,真的。整个方法应如下所示:

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);
    }
}

P.S。你会注意到我冒昧地将你的大写更改为更标准的东西。如果你像你一样使用大写,你可能会被私刑化。

答案 1 :(得分:0)

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

    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);
        }
    }

答案 2 :(得分:0)

我会从另一个方向编写循环,从0到MaxchkAwareness; 在进入循环之前先对输入进行排序。 你还需要一个索引到输入数组中的下一个项目(ChkValues),让我们调用chkValueIndex; 如果输入数组中的下一项ChkValues [chkValueIndex]是“chkAwareness”+ i.ToString() 那么你的属性是真的,你增加你的数组指针。 否则你的财产是假的。 但我认为你必须使用反射在这样的循环中设置属性,如下所示: Getting a property reference using reflection

我确信有更好的方法可以重组这个并完全不同,但听起来我觉得你正在尽力使用给你的系统做到最好。

答案 3 :(得分:0)

你可以试试这个:

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);
    }
}