我最好能提出问题陈述。请善待。
情况如下:
我有一个字符串" 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属性。
请帮忙。
答案 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);
}
}