当属性的名称出现在另一个数组中时,为该属性分配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属性。
请帮。
你很接近了。你只需要改变你的循环,真的。整个方法应该是这样的:
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);
}
}